Method Swizzling

原理

在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现,达到给方法挂钩的目的。每个类都有一个方法列表,存放着selector的名字和方法实现的映射关系。IMP类似函数指针,指向具体的Method实现。

说明

1、用 method_exchangeImplementations 来交换2个方法中的IMP
2、用 class_replaceMethod 来修改类
3、用 method_setImplementation 来直接设置某个方法的IMP,归根结底,都是偷换了selector的IMP。

你可能感兴趣的:(Method Swizzling)