isa和SuperClass

2020-09-21  本文已影响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对象如何进行内存布局?(考虑有父类的情况)

  1. 对象方法列表(对象能够接收的消息列表,保存在它所对应的类对象中)
  2. 成员变量的列表,
  3. 属性列表,

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

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

image.png

翻译过来就是

Objective-C 对象的结构图
ISA指针
根类的实例变量
倒数第二层父类的实例变量
...
父类的实例变量
类的实例变量
上一篇 下一篇

猜你喜欢

热点阅读