runtime 系統(tǒng)方法

BOOL res1 = [(id)[NSObject class] isKindOfClass:[NSObject class]];//YES

在runtime源碼中:

+ (BOOL)isKindOfClass:(Class)cls {

? ? for(Class tcls = object_getClass((id)self); tcls; tcls = tcls->superclass) {

? ? ? ? if(tcls == cls)return YES;

? ? }

? ? return NO;

}

調(diào)用類方法:cls為NSObject,而 tcls是第一次先調(diào)用object_getClass((id)self)返回objc_class中shiftcls 的isa指針,它指向元類,繼續(xù)循環(huán)在父類查找...一直到Rootclass的元類它的父類指向Rootclass類(NSObject),而cls為NSObject 所以相等

? ? ? ? BOOL res2 = [(id)[NSObject class]isMemberOfClass:[NSObject class]];

在runtime源碼:

+ (BOOL)isMemberOfClass:(Class)cls {

? ? return object_getClass((id)self) == cls;

}

調(diào)用類方法:object_getClass((id)self)通過 isa_t的isa.bits進(jìn)行位運(yùn)算獲取 isa指針指向元類而cls為NSObject類所以不想等

? ? ? ? //BOOL res3 = [(id)[Sark class] isKindOfClass:[Sark class]];

runtime源碼:

+ (BOOL)isKindOfClass:(Class)cls {

? ? for(Class tcls =object_getClass((id)self); tcls; tcls = tcls->superclass) {

? ? ? ? if(tcls == cls)return YES;

? ? }

? ? return NO;

}

調(diào)用類方法:通過object_getClass((id)self)指向元類與cls不想等,繼續(xù)循環(huán)在父類中...一直走到RootClass元類它的父類指向NSObject截止,而cls為Sark,與NSObject不相等所以返回NO

? ? ? ? //BOOL res4 = [(id)[Sark class] isMemberOfClass:[Sark class]];

runtime源碼:

+ (BOOL)isMemberOfClass:(Class)cls {

? ? return object_getClass((id)self) == cls;

}

調(diào)用類方法:object_getClass((id)self)獲取指向元類,與NSObject不相等返回NO。

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

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,032評(píng)論 0 9
  • 通過這篇文章,你會(huì)更深入的了解isa_t結(jié)構(gòu)體與ObjC的類,對(duì)象之間的關(guān)系,并從源碼中來了解isKindOfCl...
    Kobe_Dai閱讀 1,674評(píng)論 1 6
  • 我們常常會(huì)聽說 Objective-C 是一門動(dòng)態(tài)語言,那么這個(gè)「動(dòng)態(tài)」表現(xiàn)在哪呢?我想最主要的表現(xiàn)就是 Obje...
    Ethan_Struggle閱讀 2,319評(píng)論 0 7
  • 下面代碼輸出什么? self super @implementation Son : Father - (id)i...
    cmhfx1閱讀 461評(píng)論 0 0
  • 這些照片在我的手機(jī)里放了有差不多半年了,每次沒事的時(shí)候都會(huì)隨手翻翻它們,就像久別重逢的老朋友,雖然風(fēng)景停留在過去,...
    蹦噠的小跳蚤閱讀 1,238評(píng)論 8 15

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