iOS isKindOfClass & isMemberOfClass

原始鏈接
原文鏈接
官方文檔
官方文檔
Demo-Github

isKindOfClass

Returns a Boolean value that indicates whether the receiver is an instance of given class or an instance of any class that inherits from that class.
返回一個布爾值,該值指示接收方是給定類的實例還是從該類繼承的任何類的實例。

    1. 對象方法
    1. 參數(shù)為Class
    1. 改對象是否是該類的,或者該類父類的一個實例對象
  • isMemberOfClass
    Returns a Boolean value that indicates whether the receiver is an instance of a given class.
    返回一個布爾值,該值指示接收方是否是給定類的實例

    1. 對象方法
    1. 參數(shù)為Class
    1. 改對象是否是該類的一個實例對象
BOOL res1 = [(id)[NSObject class] isKindOfClass:[NSObject class]];
BOOL res2 = [(id)[NSObject class] isMemberOfClass:[NSObject class]];
BOOL res3 = [(id)[Person class] isKindOfClass:[Person class]];
BOOL res4 = [(id)[Person class] isMemberOfClass:[Person class]];
+ (Class)class OBJC_SWIFT_UNAVAILABLE("use 'aClass.self' instead");
+ (Class)class {
    return self;
}
+ (BOOL)isKindOfClass:(Class)cls {
    for (Class tcls = object_getClass((id)self); tcls; tcls = tcls->superclass) {
        if (tcls == cls) return YES;
    }
    return NO;
}
Class object_getClass(id obj)
{
    if (obj) return obj->getIsa();
    else return Nil;
}
+ (BOOL)isMemberOfClass:(Class)cls {
    return object_getClass((id)self) == cls;
}
    1. [NSObject class] 返回值是?
      • 返回NSObject這個類,有一個坑在這里就是NSObject的metaclass 是指向自己的,
      • 因為這是最頂層。
      • 所以 res1 YES, NSObject 是自己父類的子類的isa
    1. NSObject 是自己父類的instance, 但是不是當前類的instance
  • 3 和 4 同理
    res1:1
    res2:0
    res3:0
    res4:0

續(xù)集

BOOL res5 = [(id)[Person new] isMemberOfClass:[Person class]];
BOOL res6 = [(id)[Person new] isKindOfClass:[Person class]];
BOOL res7 = [(id)[Teacher new] isMemberOfClass:[Person class]];
BOOL res8 = [(id)[Teacher new] isKindOfClass:[Person class]];

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

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