Super 调用方法原理
* id objc_msgSendSuper(struct objc_super *super, SEL op, ...)
*
* struct objc_super {
* id receiver;
* Class cls;
* }
isKindOfCalss/isMerberOfClass
NSLog(@"%d",[Person isKindOfClass:[Person class]]);
NSLog(@"%d",[Person isMemberOfClass:[Person class]]);
NSLog(@"%d",[NSObject isMemberOfClass:[NSObject class]]);
NSLog(@"%d",[NSObject isKindOfClass:[NSObject class]]);
+ (BOOL)isMemberOfClass:(Class)cls {
return self->ISA() == cls;
}
- (BOOL)isMemberOfClass:(Class)cls {
return [self class] == cls;
}
+ (BOOL)isKindOfClass:(Class)cls {
for (Class tcls = self->ISA(); 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;
}