在运行时无法交换NSDictionary的方法实现objectForKey?

Dao*_*yen 2 runtime objective-c nsdictionary ios

我在运行时尝试使用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
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么?

谢谢你读了我可怜的英语.

Chu*_*uck 6

NSDictionary是一个类集群.你永远不会处理NSDictionary的直接实例; 相反,字典总是某些NSDictionary子类的实例.因此,您正在交换一种您永远不会打电话的方法.