isKindOfClass與isMemberOfClass的區(qū)別

源碼分析:

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

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

+ (BOOL)isKindOfClass:(Class)cls {
    // 獲取的是該類的meta class
    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;
}
class和meta class關系

總結:

  • + (BOOL)isMemberOfClass: 是判斷該類的meta class是否和class相等。
  • - (BOOL)isMemberOfClass:判斷該對象所屬的類是和class相等,即用于判斷一個對象是否屬于當前這個類。
  • + (BOOL)isKindOfClass:循環(huán)遍歷該類的meta classsuper class,判斷是否和class相等(只有NSObjectmeta classsuper class等于NSObject)。
  • - (BOOL)isKindOfClass:循環(huán)遍歷該對象所屬的類及super class,判斷是否和class相等,即用于判斷當前對象是否屬于這個類或者這個類的子類;。

iOS面試題匯總

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

友情鏈接更多精彩內容