Method-Swizzling 是什么?
Method-Swizzling的含義是方法交換,就是我們常說的iOS黑魔法,其主要作用是在運行時將一個方法的實現(xiàn)替換成另一個方法的實現(xiàn)。
Method-Swizzling的原理
我們常說的AOP(Aspect Oriented Programming,面向切面編程),就可以使用method-swizzling來實現(xiàn),AOP是面向切面進行提取封裝,提取各個模塊中的公共部分,提高模塊的復用率,降低業(yè)務之間的耦合性。
- 每個類都維護著一個方法列表(methodList),methodList中有不同的方法,每個方法中包含了方法的sel和IMP,方法交換就是將sel和imp原本的對應斷開,并將sel和新的IMP生成對應關(guān)系
如下圖所示,交換前后的sel和IMP的對應關(guān)系

方法交換過程
Method-Swizzling涉及的相關(guān)API
通過sel獲取方法Method
class_getInstanceMethod //獲取實例方法
class_getClassMethod //獲取類方法
method_getImplementation //獲取一個方法的實現(xiàn)
method_setImplementation //設置一個方法的實現(xiàn)
method_getTypeEncoding //獲取方法實現(xiàn)的編碼類型
class_addMethod //添加方法實現(xiàn)
class_replaceMethod //用一個方法的實現(xiàn),替換另一個方法的實現(xiàn)
method_exchangeImplementations //交換兩個方法的實現(xiàn)