底层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等其他内容

上一篇下一篇

猜你喜欢

热点阅读