經(jīng)常遇到NSMutableDictionary調(diào)用[setObject: forKey:]時敏释,若obj為nil的時候會崩潰。使用運行時替換方法边器,并檢查是否為nil.
#import "NSMutableDictionary+Obj.h"
#import <objc/runtime.h>
@implementation NSMutableDictionary (Obj)
+ (void)load {
Method fromMethod = class_getInstanceMethod(objc_getClass("__NSDictionaryM"), @selector(setObject:forKey:));
Method toMethod = class_getInstanceMethod(objc_getClass("__NSDictionaryM"), @selector(em_setObject:forKey:));
method_exchangeImplementations(fromMethod, toMethod);
}
- (void)em_setObject:(id)emObject forKey:(NSString *)key {
if (emObject && key) {
[self em_setObject:emObject forKey:key];
}
}
@end