我尝试在运行时使用NSDictionary的objectForKey:交换实现,但没有任何改变!
#import "NSDictionary+Utils.h"
#import <objc/runtime.h>
@implementation NSDictionary (Utils)
+ (void)load
{
method_exchangeImplementations(class_getInstanceMethod(self, @selector(objectForKey:)),
class_getInstanceMethod(self, @selector(_objectForKey:)));
}
- (id)_objectForKey:(id)aKey
{
NSLog(@"ok");
id obj = [self _objectForKey:aKey];
if ([obj isEqual:[NSNull null]]) {
return nil;
}
return obj;
}
@end
谁能告诉我为什么?
感谢您阅读我糟糕的英语。
答案 0 :(得分:6)
NSDictionary是一个类集群。你永远不会处理NSDictionary的直接实例;相反,字典总是某些NSDictionary子类的实例。所以你要交换一个你永远不会打电话的方法。
答案 1 :(得分:0)
对于您要实现的目标,我建议在NSDictionary上使用一个类别,提供自定义saveObjectAtIndex:
方法并在您的代码中使用它。
另一个选项是NSNull上的类别,所以它的行为类似于nil:https://gist.github.com/ronaldmannak/4532707