NSObject源码阅读小笔记
2018-05-30 本文已影响0人
我的昵称是小狼
阅读NSObjec期间发现了很多有意思的东西,记录一下
1.许多方法都系统都实现了它的加号实现和减号实现,不过内部的实现机制有很多是不同的
2.关于isMemberOfClass和isKindOfClass这个两个方法,看一下源码我们就可以很清晰的分辨它们的区别:
- (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;
}
简单明了,isMemberOfClass只会判断当前类是否等于cls,而isKindOfClass会一直去寻找父类
3.performSelector内部其实是调用了((id(*)(id, SEL))objc_msgSend)((id)self, sel)