美文网首页
OC对象中的isa和superclass指针

OC对象中的isa和superclass指针

作者: it小小菜鸟 | 来源:发表于2020-07-09 18:14 被阅读0次

isa指针

我们在OC的对象中了解到,每种对象有一个isa指针,他们的关系是:

  • instance对象的isa指向它class对象
    • 当调用\color{red}{对象方法}时,通过instance的isa找到相应的class对象,然后在class对象中找到\color{red}{对象方法}的实现,进行调用
  • class对象的isa指向meta-class对象
    • 当调用\color{red}{类方法}时,通过class对象的isa找到相应的meta-class对象,然后在meta-class对象中找到\color{red}{类方法}的实现,进行调用
  • meta-class对象的isa指向基类的meta-class对象

注意:从64bit开始,isa指针的值 & ISA_MASK 的值,才能得到真实class对象的地址

superclass

我们在OC的对象中了解到,class对象和meta-class对象中都有一个superclass指针,它的作用是找到相应的父类class对象,然后找到父类对象里面的信息。

  • class对象的superclass 指针,指向父类的class对象;基类的class对象的superclass为nil
    当调用\color{red}{对象方法}时,通过当前实例对象的isa指针,在当前类的class对象中查找方法的实现,当没有找到方法的实现,就会通过class对象的superclass指针,找到父类的class对象,一直下去,直到找到方法实现,然后调用。最终都没找到的情况,在runtime中会说到。
  • meta-class对象的superclass 指针,指向父类的meta-class的对象
    当调用\color{red}{类方法}时,通过class对象的isa指针,在当前类的meta-class对象中查找类方法的实现,当没有找到类方法的实现,就会通过meta-class的superclass指针,找到父类的meta-class对象,一直下去,直到找到方法,然后调用。
  • 基类的meta-class对象的superclass指针,指向基类的class对象

指向图如下:

20180909010616455.png

相关文章

网友评论

      本文标题:OC对象中的isa和superclass指针

      本文链接:https://www.haomeiwen.com/subject/bfyscktx.html