底层13:Runtime-Super
2020-09-02 本文已影响0人
张无奈
super:
很好解释第三行打印
NSObject中class方法伪代码实现如下:
实例对象调用:
isKindOfClass: 前面的对象的类对象是否是后面的类型或者后面类型的父类
isMemberOfClass: 判断当前对象的类对象是不是就是后面的对象
通过OC源代码更清楚了解,如下就是拷贝过来的源代码:
如果是类对象调用,右边要传入元类对象
下面一个特别的例子:
在一个类中有以下一个实例方法
控制器中如下调用,打印却是当前控制器:
1.print为什么能够调用成功?
是因为obj指向cls地址,调用print方法的时候,刚好是取用第一个元素,类似isa指针,所以他的调用方法等价 NSObject *obj2 = [[NSObject alloc] init]; [obj2 print];
2.为什么self.name变成了ViewController等其他内容