消息傳遞-緩存-轉(zhuǎn)發(fā)流程

消息傳遞

屏幕快照 2018-11-17 上午11.00.23.png
屏幕快照 2018-11-17 上午11.01.37.png

緩存查找

哈希查找

屏幕快照 2018-11-17 上午11.10.23.png

在當(dāng)前類中查找
對于已排序號的列表 采用二分查找算法查找方法對應(yīng)執(zhí)行函數(shù)
對于沒有排序的列表,采用一般遍歷查找方法對應(yīng)執(zhí)行函數(shù)
屏幕快照 2018-11-17 上午11.13.17.png

三種查找方式
緩存 -> 哈希算法查找
當(dāng)前類 -> 已排序 二分查找算法 未排序 遍歷
通過isa父類

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

實例轉(zhuǎn)發(fā)流程:
屏幕快照 2018-11-17 上午11.20.25.png

void testImp (void)
{
    NSLog(@"test invoke");
}

+ (BOOL)resolveInstanceMethod:(SEL)sel
{
    // 如果是test方法 打印日志
    
    if (sel == @selector(test)) {
        NSLog(@"resolveInstanceMethod:");

        // 動態(tài)添加test方法的實現(xiàn)
        class_addMethod(self, @selector(test), testImp, "v@:");
        
        return YES;
    }
    else{
        // 返回父類的默認調(diào)用
        return [super resolveInstanceMethod:sel];
    }
}

- (id)forwardingTargetForSelector:(SEL)aSelector
{
    NSLog(@"forwardingTargetForSelector:");
    return nil;
}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
{
    if (aSelector == @selector(test)) {
        NSLog(@"methodSignatureForSelector:");
        // v 代表返回值是void類型的  @代表第一個參數(shù)類型時id,即self
        // : 代表第二個參數(shù)是SEL類型的  即@selector(test)
        return [NSMethodSignature signatureWithObjCTypes:"v@:"];
    }
    else{
        return [super methodSignatureForSelector:aSelector];
    }
}

- (void)forwardInvocation:(NSInvocation *)anInvocation
{
    NSLog(@"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ā)布平臺,僅提供信息存儲服務(wù)。

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

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