isa和superclass
2023-03-15 本文已影响0人
冰棍儿好烫嘴
-
instance
的isa
指向class
当调用对象方法时,通过instance
的isa
找到class
,最后找到对象方法的实现进行调用 -
class
的isa
指向meta-class
当调用类方法时,通过class的isa找到meta-class
,最后找到类方法的实现进行调用
class对象(类对象)的superclass指针
- 当Student的
instance
对象要调用Person的对象方法时,会先通过isa
找到Student
的class
,然后通过superclass
找到Person的class
,最后找到对象方法的实现进行调用
meta-class对象(元类对象)的superclass指针
- 当Student的
class
要调用Person
的类方法时,会先通过isa
找到Student的meta-class
,然后通过superclass
找到Person的meta-class
,最后找到类方法的实现进行调用
isa、superclass总结
-
instance
的isa
指向class
-
class
的isa
指向meta-class
-
meta-class
的isa
指向基类的meta-class
-
class
的superclass
指向父类的class
:如果没有父类,superclass
指针为nil
-
meta-class
的superclass
指向父类的meta-class
基类的meta-class
的superclass
指向基类的class
-
instance
调用对象方法的轨迹
isa
找到class
,方法不存在,就通过superclass
找父类 -
class
调用类方法的轨迹
isa
找到meta-class
,方法不存在,就通过superclass
找父类
- 从64bit开始,isa需要进行一次位运算,才能计算出真实地址。
类对象(Class对象)和元类对象(meta-class对象)在内存中结构是一样的,都是Class类型。
c++的结构体是可以继承的
对象的isa
指针指向哪里?
-
instance
对象的isa
指向class
对象 -
class
对象的isa
指向meta-class
对象 -
meta-class
对象的isa
指向基类的meta-class
对象
OC的类信息存放在哪里?
- 对象方法、属性、成员变量(不是具体的值,放的是成员变量的信息,比如成员变量叫什么名字,是什么类型的等等)、协议信息存放在
class
对象中 - 类方法存放在
meta-class
对象中 - 成员变量的具体值,存放在
instance
对象中