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

相关文章

  • iOS-浅谈OC中isa和superclass的指针指向

    目录 isa指针----isa指针指向superclass指针----class对象的superclass指针--...

  • iOS:isa与superclass

    目录一,对象的三种类型二,对象的存储信息三,isa指针四,superclass指针五,isa和superclass...

  • 笔记 - isa和superclass

    isa的调用 class的superclass meta-class的superclass 总结1 总结2 isa...

  • isa和superclass

    isa指针 将Objective-c代码转换成 C\C++的代码 找到[person personInstance...

  • isa和SuperClass

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

  • isa和superClass

    isa 对象的isa指针是指向哪里的? instance的 isa 指向 class当调用对象方法时,通过inst...

  • isa和superclass

    D、题:对象的isa指针指向哪里? 拓展: class对象的superclass指针指向哪里? meta-clas...

  • isa 和 superclass

    OC对象的分类OC中的对象,简单来说可以分为三大类:instance 对象(实例对象)、class 对象(类对象)...

  • isa 和 superclass

    实例对象的 isa 指向类对象,类对象的 isa 指向元类对象,元类的isa 指向基类的元类对象,基类的元类对象的...

  • isa和superClass

    Objective-C的本质 我们平时编写的Objective-C代码,底层实现其实都是C\C++代码,Objec...

网友评论

      本文标题:isa和SuperClass

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