使用Method Swizzling遇到的問題和項(xiàng)目中使用的Swizzling方案
導(dǎo)語:Method Swizzling是Objective-C中運(yùn)行時中討論較多的內(nèi)容,本文主要介紹使用Method Swizzling遇到的問題和項(xiàng)目中使用的Swizzling方案。
一、Method Swizzling簡介
Method Swizzling的本質(zhì)是在運(yùn)行時交換方法實(shí)現(xiàn)(IMP),如hook系統(tǒng)方法,在原有的方法中,插入自己的業(yè)務(wù)需求。
1、Method Swizzling原理
Objective-C的消息機(jī)制:在 Objective-C 中調(diào)用一個方法, 實(shí)際上是在底層通過 objc_msgSend()發(fā)送一個消息。 而查找消息的唯一依據(jù)是selector的方法名。
//調(diào)用方法 [obj doSomething]; //[obj doSomething]本質(zhì)上是給obj發(fā)doSomething消息 objc_msgSend(obj,@selector(doSomething))
每一個OC實(shí)例對象都保存有isa指針和實(shí)例變量,其中isa指針?biāo)鶎兕?,類維護(hù)一個運(yùn)行時可接收的方法列表(MethodLists);方法列表(MethodLists)中保存selector的方法名和方法實(shí)現(xiàn)(IMP,指向Method實(shí)現(xiàn)的指針)的映射關(guān)系。在運(yùn)行時,通過selecter找到匹配的IMP,從而找到的具體的實(shí)現(xiàn)函數(shù)。
MethodLists示意圖.png
開發(fā)中可以利用Objective-C的動態(tài)特性,在運(yùn)行時替換selector對應(yīng)的方法實(shí)現(xiàn)(IMP),達(dá)到給hook的目的。下圖是利用Method Swizzling來替換selector對應(yīng)IMP后的方法列表示意圖。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
使用Method Swizzling遇到的問題和項(xiàng)目中使用的Swizzling方案下載
相關(guān)電子資料下載
- Isort:自動整理import的超實(shí)用工具教程 56
- 基于半橋LLC諧振變換器Mathcad和Matlab小信號建模分析 250
- 快速入門-Simplicity Studio開發(fā)環(huán)境安裝、演示與工作項(xiàng)目 132
- 無刷電機(jī)小車開發(fā)記錄—移植SimpleFOC流程 316
- 如何實(shí)現(xiàn)__import__()動態(tài)導(dǎo)入 432
- rom…import導(dǎo)入代碼介紹 423
- import模塊的導(dǎo)入方法 403
- 半導(dǎo)體紅外測溫|IMPAC紅外測溫儀解決方案 257
- 譯文分享:XimpleWare訴Versata Software等一審判決(2014) 80
- 源譯識 | 譯文分享:XimpleWare訴Versata Software等一審判決(2014) 80