二 . isa指针

image.png

instance的isa指向class
当调用对象方法时,通过instance的isa找到class,最后找到对象方法的实现进行调用
class的isa指向meta-class
当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用

类对象的superClass指针


image.png

当student的instance对象要调用Person对象的对象方法时,会先通过isa找到sudent的class,然后通过superclass指针找到person的class,最后找到对象方法的实现进行调用

元类对象的superclass指针


image.png

当student的class要调用Person的类方法的时候,会先通过isa找到student的meta-class,然后通过superclass指针找到Person的meta-class,最后找到类方法的实现进行调用

image.png

从上图可知:
实例对象的isa指针指向类对象
类对象的isa指针指向元类对象
元类对象的isa指针指向基类的元类(根源类)

类对象的superClass指针指向父类的Class
如果没有父类,superClass指针为nil

元类的superClass指针指向父类的元类对象
基类的元类(根源类)的superClass指向基类的class (NSobject)

假如 Student 继承Person Person继承NSObject
Student实例S调用test方法 会到Person当中找 如果没有 则到NSObject当中找

如果发送消息到类对象Student中找类方法 则会到元类中找 元类中找不到则会到根源类,如果没有到NSObject中找 如果再没有找到的话会找对象方法

查找方法流程 不管是+方法还是-方法
isa -》superClass -> superClass -> superClass

实例对象的isa地址 &ISA_MASK后得到类的地址 类的isa地址 需要 & ISA_MASK得到元类的地址 元类的isa地址&ISA_MASK得到根源类的地址

但是superClass指针就是父类的地址

image.png

你可能感兴趣的:(二 . isa指针)