没什么hook 方法没效果

很奇怪,为什么hook NSDictionary 的 - (id)objectForKey:(id)aKey 方法没有效果,但是hook - (instancetype)init方法就有效果,这是为什么呢?
xm如下:
%hook NSDictionary

  • (id)objectForKey:(id)aKey {
    NSLog(@“objectForKey:”);
    return %orig;
    }

  • (instancetype)init {
    NSLog(@“init”);
    return %orig;
    }
    %end

我也碰到这个问题,没弄明白原因

因为一个字典在执行期间可能是一个“__NSDictionaryI” 类、“__NSDictionaryM”类或者其他的“NSDictionary”类的子类,而这些子类有重写了"objectForKey:"函数,所以实际调用的是子类的函数而非“NSDictionary”类的,所以你可以试试hook “__NSDictionaryI” 类和“__NSDictionaryM”。