判断对象是否是Class的实例,如果是返回YES,如果不是返回NO
我们看看他的底层实现是什么样子的
- (BOOL)isMemberOfClass:(Class)cls {
return [self class] == cls;
}
+ (BOOL)isMemberOfClass:(Class)cls {
return self->ISA() == cls;
}
- (BOOL)isKindOfClass:(Class)cls {
for (Class tcls = [self class]; tcls; tcls = tcls->getSuperclass()) {
if (tcls == cls) return YES;
}
return NO;
}
+ (BOOL)isKindOfClass:(Class)cls {
for (Class tcls = self->ISA(); tcls; tcls = tcls->getSuperclass()) {
if (tcls == cls) return YES;
}
return NO;
}
Class的ISA()方法获取的是元类对象,所以这里比较的元类
知道了方法的原理后在看这写会非常清晰,这里可能有一点不明白是[[NSObject class] isKindOfClass:[NSObject class]]他为什么是YES,这个在前面我们讲到了metaClass的基类指向了[NSObject Class]