美文网首页
oc对象的内存布局

oc对象的内存布局

作者: xxttw | 来源:发表于2023-06-08 22:33 被阅读0次
    image.png

    isa

    • 实例对象的isa 指向它的类对象
    • 类对象的isa 指向它的元类对象
    • 元类对象的isa 指向基类的元类对象
    • 基类的元类对象的isa指向它自己

    superclass

    • 类的superclass 指向 父类的类对象,如果没有父类, superclass指向nil
    • 父类的superclass指向 基类的类对象
    • 基类(NSObject)的superclass指向 nil

    • 元类的superclass指向 父类的元类对象
    • 父类的元类对象的superclass指向 基类的元类对象
    • 基类的元类对象的superclass指向 基类的类对象(NSObject)

    实例对象的查找方法流程

    实例对象通过isa 找到其类对象, 如果找不到方法, 就 通过Superclass找到其父类对象
    还找不到, 在继续通过superclass向上查找, 直接superclass = nil 也没找到,这就说明在整个继承体系里都找不到这个方法

    类对象的查找方法的流程

    类对象通过isa 找到其元类对象, 在元类对象的cache和 class_rw_t的方法列表中查找, 如果没有找到,
    通过元类对象的superclass找到其 父类的元类对象的cache和 class_rw_t的方法列表中查找, 如果没有找到,
    通过父类的元类对象的superclass找到其 基类的元类对象, 重复查找过程, 如果没有找到
    通过基类的元类对象的superclass 找到其类对象, 基类的元类的superclass指针指向类对象(NSObject),相当于就是已经找到了NSObject,在还没找到就说明没有此方法

    相关文章

      网友评论

          本文标题:oc对象的内存布局

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