Method-Swizzling 是什么?
Method-Swizzling的含义是方法交换,就是我们常说的iOS黑魔法,其主要作用是在运行时将一个方法的实现替换成另一个方法的实现。
Method-Swizzling的原理
我们常说的AOP(Aspect Oriented Programming,面向切面编程),就可以使用method-swizzling来实现,AOP是面向切面进行提取封装,提取各个模块中的公共部分,提高模块的复用率,降低业务之间的耦合性。
- 每个类都维护着一个方法列表(methodList),methodList中有不同的方法,每个方法中包含了方法的sel和IMP,方法交换就是将sel和imp原本的对应断开,并将sel和新的IMP生成对应关系
如下图所示,交换前后的sel和IMP的对应关系

方法交换过程
Method-Swizzling涉及的相关API
通过sel获取方法Method
class_getInstanceMethod //获取实例方法
class_getClassMethod //获取类方法
method_getImplementation //获取一个方法的实现
method_setImplementation //设置一个方法的实现
method_getTypeEncoding //获取方法实现的编码类型
class_addMethod //添加方法实现
class_replaceMethod //用一个方法的实现,替换另一个方法的实现
method_exchangeImplementations //交换两个方法的实现