OC底層 - Method-Swizzling 方法交換

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)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容