看了网上那么多对这几个函数的区分,总觉得不如看源码来的实在:
- (BOOL)isMemberOfClass:(Class)cls {
return [self class] == cls;
}
isMemberOfClass的判定较为严格,传入的cls必须得是跟当前类是同一个类,才会返回YES。
- (BOOL)isKindOfClass:(Class)cls {
for (Class tcls = [self class]; tcls; tcls = tcls->superclass) {
if (tcls == cls) return YES;
}
return NO;
}
isKindOfClass会一直沿着[self class]继承链往上找,直到找到这个类为止
+ (BOOL)isSubclassOfClass:(Class)cls {
for (Class tcls = self; tcls; tcls = tcls->superclass) {
if (tcls == cls) return YES;
}
return NO;
}
isSubclassOfClass跟isKindOfClass的作用差不多,可以理解为是isKindOfClass的类方法版本。