@implementation NSObject
- (BOOL)isMemberOfClass:(Class)cls {
return [self class] == cls;
}
- (BOOL)isKindOfClass:(Class)cls {
for (Class tcls = [self class]; tcls; tcls = tcls->superclass) {
if (tcls == cls) return YES;
}
return NO;
}
+ (BOOL)isMemberOfClass:(Class)cls {
return object_getClass((id)self) == cls;
}
+ (BOOL)isKindOfClass:(Class)cls {
for (Class tcls = object_getClass((id)self); tcls; tcls = tcls->superclass) {
if (tcls == cls) return YES;
}
return NO;
}
@end
// - 看上边代码可知 对于 实例对象来说 [self class] 标识当前实例对象的类, 但是对于 类对象来说object_getClass(self) 表示当前对象的元类对象, 所以 有以下的打印
NSLog(@"%d", [NSObject isKindOfClass:[NSObject class]]); ------------1
NSLog(@"%d", [NSObject isMemberOfClass:[NSObject class]]); ------------ 0
NSLog(@"%d", [MJPerson isKindOfClass:[MJPerson class]]); ------------ 0
NSLog(@"%d", [MJPerson isMemberOfClass:[MJPerson class]]); ------------ 0