OC中消息傳遞的過程及消息轉(zhuǎn)發(fā)流程

消息傳遞的大致流程
  1. 會先從緩存中查找,采用的是哈希查找,若緩存命中,執(zhí)行對應函數(shù),若未命中,則從當前類方法列表中查找;
  2. 從當前類方法列表中查找,(對于已排序好的列表,采用二分查找算法查找方法對應執(zhí)行函數(shù);對于沒有排序的列表,采用一般遍歷查找方法對應執(zhí)行函數(shù)),若當前類方法列表命中,則執(zhí)行,若未命中,則從父類方法列表中查找;
  3. 從父類方法列表中查找,也是先查找緩存中,再查找當前類,若找到,則執(zhí)行,若一直未找到,則走消息轉(zhuǎn)發(fā)流程

緩存中查找

是根據(jù)對應的key進行哈希查找 ,通過哈希算法計算出IMP所在位置

當前類中查找

  • 對于已排序好的列表,采用二分查找算法查找方法對應執(zhí)行函數(shù)
  • 對于沒有排序的列表,采用一般遍歷查找方法對應執(zhí)行函數(shù)

父類逐級查找

父類逐級查找流程

消息轉(zhuǎn)發(fā)

消息轉(zhuǎn)發(fā)流程
  • 動態(tài)方法解析(resolveInstanceMethod)
  • 快速轉(zhuǎn)發(fā)(forwardingTargetForSelector)
  • 慢速轉(zhuǎn)發(fā)(methodSignatureForSelector -> forwardInvocation)
最后編輯于
?著作權(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)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 30,262評論 8 265
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,674評論 1 32
  • 那天 小鎮(zhèn)的人家少得屈手可數(shù),學校在稻田的一側(cè),住的地方在學校旁一條深深的胡同里。身影,在晨起和暮落中,一天兩次地...
    如貓而至閱讀 267評論 0 0
  • 真的有很多人,傷了人而不自知,把別人弄的遍體鱗傷還渾然不知,真不知這是他們的幸運還是不幸! 以我的一個朋友為例,先...
    享受靜靜的午后時光閱讀 442評論 0 0
  • 時間——時間總是在我不經(jīng)意的時候悄然身心從我的身旁走過,你總可以在這短暫的歲月里,流露出我無限的光彩,你會在...
    冰磊閱讀 199評論 0 2

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