91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機編程>

使用Method Swizzling遇到的問題和項目中使用的Swizzling方案

大?。?/span>0.2 MB 人氣: 2017-09-22 需要積分:1

  導語:Method Swizzling是Objective-C中運行時中討論較多的內(nèi)容,本文主要介紹使用Method Swizzling遇到的問題和項目中使用的Swizzling方案。

  一、Method Swizzling簡介

  Method Swizzling的本質(zhì)是在運行時交換方法實現(xiàn)(IMP),如hook系統(tǒng)方法,在原有的方法中,插入自己的業(yè)務需求。

  1、Method Swizzling原理

  Objective-C的消息機制:在 Objective-C 中調(diào)用一個方法, 實際上是在底層通過 objc_msgSend()發(fā)送一個消息。 而查找消息的唯一依據(jù)是selector的方法名。

  //調(diào)用方法 [obj doSomething]; //[obj doSomething]本質(zhì)上是給obj發(fā)doSomething消息 objc_msgSend(obj,@selector(doSomething))

  每一個OC實例對象都保存有isa指針和實例變量,其中isa指針所屬類,類維護一個運行時可接收的方法列表(MethodLists);方法列表(MethodLists)中保存selector的方法名和方法實現(xiàn)(IMP,指向Method實現(xiàn)的指針)的映射關系。在運行時,通過selecter找到匹配的IMP,從而找到的具體的實現(xiàn)函數(shù)。

  使用Method Swizzling遇到的問題和項目中使用的Swizzling方案

  MethodLists示意圖.png

  開發(fā)中可以利用Objective-C的動態(tài)特性,在運行時替換selector對應的方法實現(xiàn)(IMP),達到給hook的目的。下圖是利用Method Swizzling來替換selector對應IMP后的方法列表示意圖。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?