swizzle NSMutableArray addObject:失败

时间:2015-11-17 15:51:48

标签: ios objective-c

我没有调整NSMutableArray addObject。代码如下:

Method ori_Mehtod = class_getInstanceMethod([self class], @selector(addObject:));
Method swi_Method = class_getInstanceMethod([self class], @selector(swi_addObject:));
method_exchangeImplementations(ori_Mehtod, swi_Method);

但是,我找到了一种有用的方法,如下所示:

Method orig = class_getInstanceMethod(NSClassFromString(@"__NSArrayM"), NSSelectorFromString(@"addObject:"));
Method override = class_getInstanceMethod(NSClassFromString(@"__NSArrayM"), @selector(addObject_override:));
method_exchangeImplementations(orig, override);

我猜[self class]有些不对劲。但我不知道问题出在哪里。

3 个答案:

答案 0 :(得分:2)

NSMutableArray是一个类集群。实例始终是隐藏的类类型(例如您找到的__NSArrayM),因此调整NSMutableArray类本身并没什么用。

答案 1 :(得分:0)

我认为你正在寻找一种混合群集的方法,看一下NSObjectSafe,它是一个很小的开源框架,它挂接了大多数常用的Foundation容器函数,如[NSMutableArray addObject:] < / p>

答案 2 :(得分:0)