isa指针

作者: 东方诗空 | 来源:发表于2022-03-20 22:22 被阅读0次

开始之前先问?

提问?

对象的isa指针指向哪里?

通过查看源码来学习:
源码下载地址
https://opensource.apple.com/tarballs/objc4/

image.png
  • instance的isa指向class
    当调用对象方法时,通过instance的isa找到class,最后找到对象方法的实现进行调用

  • class的isa指向meta-class
    当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用

image.png
  • 当Student的instance对象要调用Person的对象方法时,会先通过isa找到Student的class,然后通过superclass找到Person的class,最后找到对象方法的实现进行调用
image.png
  • 当Student的class要调用Person的类方法时,会先通过isa找到Student的meta-class,然后通过superclass找到Person的meta-class,最后找到类方法的实现进行调用

struct objc_class的结构

image.png

总结:

image.png
  • instance的isa指向class

  • class的isa指向meta-class

  • meta-class的isa指向基类的meta-class

  • class的superclass指向父类的class
    如果没有父类,superclass指针为nil

  • meta-class的superclass指向父类的meta-class
    基类的meta-class的superclass指向基类的class

  • instance调用对象方法的轨迹
    isa找到class,方法不存在,就通过superclass找父类

  • class调用类方法的轨迹
    isa找meta-class,方法不存在,就通过superclass找父类

回答最初提问

对象的isa指针指向哪里?
instance对象的isa指向class对象
class对象的isa指向meta-class对象
meta-class对象的isa指向基类的meta-class对象

相关文章

网友评论

      本文标题:isa指针

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