iOS runtime 筆記四 — Hank 公開課上的筆記

方法的懶加載

顧名思義,當(dāng)一個(gè)類中,并不存在一個(gè)方法,可以通過 runtime 去動態(tài)的創(chuàng)建他.

Person * p = [[Person alloc]init];
//調(diào)用eat方法
[p performSelector:@selector(eat:) withObject:@"板燒雞腿堡"];

//...

@implementation Person

//當(dāng)調(diào)用了一個(gè)沒有實(shí)現(xiàn)的類方法
//+(BOOL)resolveClassMethod:(SEL)sel

//默認(rèn)參數(shù)


//調(diào)用了一個(gè)沒有實(shí)現(xiàn)的對象方法
+(BOOL)resolveInstanceMethod:(SEL)sel {
    //添加一個(gè)方法eat
    if (sel == @selector(eat:)) {
        //IMP 方法實(shí)現(xiàn) 就是一個(gè)函數(shù)指針!!
        //types:返回值類型
        class_addMethod([Person class], @selector(eat:), (IMP)eat, "v@:@");
    }

    return  [super resolveClassMethod:sel];
}

void eat(id objc,SEL _cmd,id obj){
    NSLog(@"哥么吃了!!%@ ",obj);
}
@end

這里有一個(gè)知識點(diǎn)

動態(tài)的添加方法 --- class_addMethod([Person class], @selector(eat:), (IMP)eat, "v");
這里的第三個(gè)參數(shù) (IMP)eat存在一個(gè)知識點(diǎn)

  • 之前說的 IMP是一個(gè)方法的實(shí)現(xiàn),實(shí)質(zhì)上,就是一個(gè)函數(shù)指針.
  • 對 OC 而言,調(diào)用方法的實(shí)質(zhì),是調(diào)用函數(shù).
    可以簡單的理解為,
    • 方法是形如-(void)myMethod:(id)params,
    • 函數(shù)是形如void func(id objc, SEL _cmd, id realParam)
      當(dāng)方法被調(diào)用時(shí),進(jìn)入底層,調(diào)用對應(yīng)的函數(shù),此時(shí)會多傳兩個(gè)隱式參數(shù),
    • id objc -- 代表的是方法的調(diào)用者,誰調(diào)用,就是誰.這里
    • _cmd -- 代表的是方法名. SEL
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,074評論 0 9
  • 我們常常會聽說 Objective-C 是一門動態(tài)語言,那么這個(gè)「動態(tài)」表現(xiàn)在哪呢?我想最主要的表現(xiàn)就是 Obje...
    Ethan_Struggle閱讀 2,345評論 0 7
  • 對于從事 iOS 開發(fā)人員來說,所有的人都會答出【runtime 是運(yùn)行時(shí)】什么情況下用runtime?大部分人能...
    夢夜繁星閱讀 3,812評論 7 64
  • 本文轉(zhuǎn)載自:http://yulingtianxia.com/blog/2014/11/05/objective-...
    ant_flex閱讀 888評論 0 1
  • 聽說你還在為寸土寸金奮斗 文/梁魅寐 我第一次去酒吧是和當(dāng)時(shí)住青旅的時(shí)候遇到的沙發(fā)客山西漢子去的。胖爺是個(gè)仗義的帥...
    梁小澍閱讀 392評論 4 2

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