iOSisa指针和superclass指针

2021-04-12  本文已影响0人  nickNic

isa指针
实例对象的isa指向类对象
类对象的isa指向元类对象
元类对象的isa指向基类的元类
如何证明上面所述
可以通过lldb指令打印实例对象的isa地址和类对象的地址你可以发现两者打印的地址值是一摸一样的

superclass指针
类对象的superclass指向父类的类对象
如果没有父类, superclass指向nil
meta-class的superclass指向父类的meta-class
基类的meta-class的superclass指向基类的class
如何证明上面所述
可以通过lldb指令打印类对象的superclass地址和父类对象的地址你可以发现两者打印的地址值是一摸一样的

instance 调用对象方法的轨迹
isa找到class,方法不存在,就通过superclass找父类看看里面有没有要找的对象方法

class 调用类方法的轨迹
isa找到meta-class,方法不存在,就通过superclass找父类的meta-class看看里面有没有要找的类方法
如果父类的meta-class 里面也没有那么就会找父类的class,在还没找到就会报
unrecognized selector sent to class

对象isa指针指向哪里
实例对象的isa指向类对象
类对象的isa指向元类对象
元类对象的isa指向基类的元类

oc的类信息存放在哪里
对象方法、属性、成员变量、协议信息,存放在class对象中
类方法存放在meta-class对象中
成员变量的具体值放在instance实例对象中

738923-20200827184125974-1510726405-2.png
上一篇下一篇

猜你喜欢

热点阅读