美文网首页
isa和SuperClass

isa和SuperClass

作者: 一个半吊子工程师 | 来源:发表于2020-09-21 11:48 被阅读0次

    开局一张图

    图解
    刚开始看这图时,我也是懵的
    其实也很好理解,这得分开看
    虚线 isa
    实线superclass
    根类、基类 一般都是指:NSObject

    isa的走位

    实例对象(Instance of Subclass)isa 指向 类(class)

    类对象(class)isa指向 元类(Meta class)

    元类(Meta class)isa 指向根元类(Root metal class)

    元类(Root metal class)isa指向它自己本身,形成闭环,这里的根元类就是NSObject

    superclass(继承关系)走位

    类(subClass) 继承自 父类(superClass)

    父类(superClass) 继承自 根类(RootClass ),此时的 根类是指 NSObject

    根类 继承自 nil,所以 根类即 NSObject可以理解为万物起源

    子类的 元类(metal SubClass) 继承自 父类的 元类(metal SuperClass)

    父类的 元类(metal SuperClass ) 继承自 根元类(Root metal Class)

    根元类(Root metal Class) 继承于 根类(Root class ),此时的 根类是指 NSObject

    【注意】 实例对象之间 没有 继承关系,类之间有继承关系

    一个objc对象如何进行内存布局?(考虑有父类的情况)

    • 所有父类的成员变量和自己的成员变量都会存放在该对象所对应的存储空间中.
    • 每一个对象内部都有一个isa指针,指向他的类对象,类对象中存放着本对象的
    1. 对象方法列表(对象能够接收的消息列表,保存在它所对应的类对象中)
    2. 成员变量的列表,
    3. 属性列表,

    它内部也有一个isa指针指向元对象(meta class),元对象内部存放的是类方法列表,类对象内部还有一个superclass的指针,指向他的父类对象。

    每个 Objective-C 对象都有相同的结构,如下图所示:

    image.png

    翻译过来就是

    Objective-C 对象的结构图
    ISA指针
    根类的实例变量
    倒数第二层父类的实例变量
    ...
    父类的实例变量
    类的实例变量
    • 根对象就是NSObject,它的superclass指针指向nil

    • 类对象既然称为对象,那它也是一个实例。类对象中也有一个isa指针指向它的元类(meta class),即类对象是元类的实例。元类内部存放的是类方法列表,根元类的isa指针指向自己,superclass指针指向NSObject类。

    相关文章

      网友评论

          本文标题:isa和SuperClass

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