美文网首页
iOS 黑魔法-Method Swizzling

iOS 黑魔法-Method Swizzling

作者: LeiovU | 来源:发表于2018-03-09 11:01 被阅读25次

原理:

在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现,达到给方法挂钩的目的。

每个类都有一个方法列表,存放着selector的名字和方法实现的映射关系。IMP有点类似函数指针,指向具体的Method实现。

我们可以利用 method_exchangeImplementations 来交换2个方法中的IMP。


例:

重写NSUserDefaults的读写方法,将原来的(setObject:forKey:)方法,替换成自定义的方法,如(cySwizzlingSetObject:forKey:)

然后交换自定义方法和系统方法,如下:

```

Method originalMethod = class_getInstanceMethod([NSUserDefaults class],  @selector(setObject:forKey:));  

Method cySwizzledMethod = class_getInstanceMethod([NSUserDefaults class], @selector(cySwizzleSetObject:forKey:));  

 method_exchangeImplementations(originalMethod, cySwizzledMethod); 

```

相关文章

网友评论

      本文标题:iOS 黑魔法-Method Swizzling

      本文链接:https://www.haomeiwen.com/subject/pwrpfftx.html