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)

上一篇下一篇

猜你喜欢

热点阅读