美文网首页
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