class和superclass

class和superclass源碼(runtime源碼里有)

Foundation框架里NSObject框架里的有些基礎(chǔ)方法是開源的,
objc4源碼鏈接 https://opensource.apple.com/tarballs/objc4/
在源碼里搜索NSOject.mm文件,然后搜索class就找到源碼了
class的作用是獲取對(duì)象的類對(duì)象,superclass的作用是獲取父類。

源碼
+ (Class)class {
    return self;
}

- (Class)class {
    return object_getClass(self);
}

+ (Class)superclass {
    return self->superclass;
}

- (Class)superclass {
    return [self class]->superclass;
}

isMemberOfClass

左邊對(duì)象的類對(duì)象是否等于右邊的類對(duì)象

isKindOfClass

左邊的類對(duì)象是否是等于右邊類對(duì)象,或者是右邊類對(duì)象的子類

源碼

重點(diǎn)

看調(diào)用方法的是實(shí)例對(duì)象還是類對(duì)象,或者說看是類方法還是對(duì)象方法,類方法調(diào)用的話,object_getClass((id)self),這行代碼得到的是元類對(duì)象,那右邊傳入的類也應(yīng)該是元類對(duì)象才會(huì)相等。右邊傳入的如果是NSObject,只要左邊是NSObject的子類,一般是成立的。

+ (BOOL)isMemberOfClass:(Class)c ls {
    return object_getClass((id)self) == cls;
}

- (BOOL)isMemberOfClass:(Class)cls {
    return  [self class] == cls;
}

+ (BOOL)isKindOfClass:(Class)cls {
    for (Class tcls = object_getClass((id)self); tcls; tcls = tcls->superclass) {
        if (tcls == cls) return YES;
    }
    return NO;
}

- (BOOL)isKindOfClass:(Class)cls {
    for (Class tcls = [self class]; tcls; tcls = tcls->superclass) {
        if (tcls == cls) return YES;
    }
    return NO;
}

+ (BOOL)isSubclassOfClass:(Class)cls {
    for (Class tcls = self; tcls; tcls = tcls->superclass) {
        if (tcls == cls) return YES;
    }
    return 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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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