源碼分析:
+ (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相等,即用于判斷當前對象是否屬于這個類或者這個類的子類;。