美文网首页
isa和superclass

isa和superclass

作者: 冰棍儿好烫嘴 | 来源:发表于2023-03-15 21:32 被阅读0次
    • instanceisa指向class
      当调用对象方法时,通过instanceisa找到class,最后找到对象方法的实现进行调用
    • classisa指向meta-class
      当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用

    class对象(类对象)的superclass指针

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

    meta-class对象(元类对象)的superclass指针

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

    isa、superclass总结

    • instanceisa指向class

    • classisa指向meta-class

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

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

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

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

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

    • 从64bit开始,isa需要进行一次位运算,才能计算出真实地址。

    objc4源码下载

    类对象(Class对象)和元类对象(meta-class对象)在内存中结构是一样的,都是Class类型。
    c++的结构体是可以继承的

    窥探struct objc_class(类对象和元类对象Class结构体)的结构

    对象的isa指针指向哪里?

    • instance对象的isa指向class对象
    • class对象的isa指向meta-class对象
    • meta-class对象的isa指向基类的meta-class对象

    OC的类信息存放在哪里?

    • 对象方法、属性、成员变量(不是具体的值,放的是成员变量的信息,比如成员变量叫什么名字,是什么类型的等等)、协议信息存放在class对象中
    • 类方法存放在meta-class对象中
    • 成员变量的具体值,存放在instance对象中

    相关文章

      网友评论

          本文标题:isa和superclass

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