
消息傳遞的大致流程
- 會先從緩存中查找,采用的是哈希查找,若緩存命中,執(zhí)行對應函數(shù),若未命中,則從當前類方法列表中查找;
- 從當前類方法列表中查找,(對于已排序好的列表,采用二分查找算法查找方法對應執(zhí)行函數(shù);對于沒有排序的列表,采用一般遍歷查找方法對應執(zhí)行函數(shù)),若當前類方法列表命中,則執(zhí)行,若未命中,則從父類方法列表中查找;
- 從父類方法列表中查找,也是先查找緩存中,再查找當前類,若找到,則執(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)