class对象的superclass指针及 meta-class对象的superclass

517 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。


class对象的superclass指针 子类的实例对象要调用   父类的实例方法。

该如何调用???

首先,子类的实例对象 去子类中找实例方法。

找到就调用,如果没有找到,就去父类中找 实例方法。

然后调用。

子类找父类需要一个指针就是superclass指针。

Student继承Person  Person继承NSObject

image.png

当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,最后

找到类方法的实现进行调用。

image.png

isa、superclass总结

image.png

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中消息转发机制,以后再说。。。。。。