源碼分析:
+ (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 class
的super class
者蠕,判斷是否和class
相等(只有NSObject
的meta class
的super class
等于NSObject
)檩奠。- (BOOL)isKindOfClass:
循環(huán)遍歷該對象所屬的類及super class
,判斷是否和class
相等蔓挖,即用于判斷當前對象是否屬于這個類或者這個類的子類夕土;。