iOS事件傳遞機制的使用

以前一直只知道iOS調(diào)用事件流程時候,如果調(diào)用者沒有實現(xiàn)方法,那么就要最多進行三步曲,
首先,我大概說明一下OC中給一個對象發(fā)送消息是個什么過程:

遍歷當前類的方法列表,找到該方法并且執(zhí)行IMP方法體(有緩存機制提高查找效率)。
如果沒找到該方法,runtime會嘗試在

+resolveInstanceMethod: 

或者

 +resolveClassMethod:

中處理該方法。若方法返回YES,runtime會重新嘗試發(fā)送這個消息。
若+resolve...方法返回NO,runtime會走

-forwardingTargetForSelector:

方法允許你返回一個方法接受者(意味著可以更改方法接受者)。
若-forwardingTargetForSelector:方法返回的對象無效,runtime會走

methodSignatureForSelector:

方法嘗試獲取一個方法體對象(NSMethodSignature),若該方法沒有有效的返回值,就會報異常

unrecognized selector sent to instance。

若methodSignatureForSelector:方法返回了一個有效的方法體,runtime會走

-forwardInvocation:

方法嘗試發(fā)送消息,當然這里也可以使用

-doesNotRecognizeSelector:

方法拋出異常。

但是一直沒想到如何去用!
然后通過這篇文章有了一點小思路
http://www.itdecent.cn/p/fb9e0ee8fa82

項目地址:https://github.com/indulgeIn/YBProxyCuttingModule

另外:附帶一個利用消息轉發(fā)處理UITextField的輸入內(nèi)容限制方法:
http://www.itdecent.cn/p/0e527df5c1ef

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

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

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