Skip to content

Instantly share code, notes, and snippets.

@yangmeyer
Created October 8, 2012 14:37
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yangmeyer/3852865 to your computer and use it in GitHub Desktop.
Save yangmeyer/3852865 to your computer and use it in GitHub Desktop.
Drop-in options/defaults support (NSObject category)
// Created by YangMeyer on 08.10.12.
// Copyright (c) 2012 Yang Meyer. All rights reserved.
#import <Foundation/Foundation.h>
@interface NSObject (YMOptionsAndDefaults)
- (void)ym_registerOptions:(NSDictionary *)options
defaults:(NSDictionary *)defaults;
- (id)ym_optionOrDefaultForKey:(NSString*)optionKey;
@end
// Created by YangMeyer on 08.10.12.
// Copyright (c) 2012 Yang Meyer. All rights reserved.
#import "NSObject+YMOptionsAndDefaults.h"
#import <objc/runtime.h>
@implementation NSObject (YMOptionsAndDefaults)
#define kYMStandardOptionsTableName @"YMStandardOptionsTableName"
#define kYMStandardDefaultsTableName @"YMStandardDefaultsTableName"
- (void)ym_registerOptions:(NSDictionary *)options
defaults:(NSDictionary *)defaults
{
objc_setAssociatedObject(self, (__bridge const void *)(kYMStandardOptionsTableName), options, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
objc_setAssociatedObject(self, (__bridge const void *)(kYMStandardDefaultsTableName), defaults, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (id)ym_optionOrDefaultForKey:(NSString*)optionKey
{
NSDictionary *options = objc_getAssociatedObject(self, (__bridge const void *)(kYMStandardOptionsTableName));
NSDictionary *defaults = objc_getAssociatedObject(self, (__bridge const void *)(kYMStandardDefaultsTableName));
NSAssert(defaults, @"Defaults must have been set when accessing options.");
return options[optionKey] ?: defaults[optionKey];
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment