class对象的superclass指针及 meta-class对象的superclass
class对象的superclass指针 子类的实例对象要调用 父类的实例方法。
该如何调用???
首先,子类的实例对象 去子类中找实例方法。
找到就调用,如果没有找到,就去父类中找 实例方法。
然后调用。
子类找父类需要一个指针就是superclass指针。
Student继承Person Person继承NSObject
当Student的instance 对象需要调用person的对象方法时,会先通过isa找到Student的class,然后通过superclass找到Person的class,最后找到对象方法的实现进行调用。
如果最终没有找到呢???有机会再来讨论。
meta-class对象的superclass
当student的class要调用Person的类方法时,该怎么办?
当student的class要调用Person的类方法时,
会先通过isa找到Student的meta-class,
然后通过superclass找到Person的meta-class,最后
找到类方法的实现进行调用。
isa、superclass总结
instance的isa指向class
class的isa指向meta-class
meta-class的isa指向基类的meta-class
class的superclass指向父类的class
如果没有父类,superclass指针为nil
meta-class的superclass指向父类的meta-clas
基类的的meta-class的superclass指向基类的class
instance调用对象方法的轨迹。
isa找到class,方法不存在,就通过superclass找父类。
class调用类方法的轨迹。
isa找到meta-class,方法不存在,就通过superclass找父类
如果再找不到,会触发runtime中消息转发机制,以后再说。。。。。。
作者:用户2109385917629
链接:https://juejin.cn/post/7020422737784995854