isa指针的作用
image.png-
instance
的isa
指向class
当调用对象方法时,通过instance
的isa
找到class
,最终找到对象方法进行调用 -
class
的isa
指向meta-class
当调用类方法时,通过class
的isa
找到meta-class
,最终找到类方法进行调用
class 的 superclass 的作用
image.png场景:
Student调用init方法
1、通过Student的isa指针找到Student的class
2、通过Student的class的superclass指针找到Person的class
3、通过Person的class的superclass指针找到NSObject的class
4、最终找到对象方法init方法,进行调用
meta-class的superclass的作用
image.png场景:
Student调用alloc方法
[Person alloc]
1、通过Student类的isa指针找到Student的meta-class
2、通过Student的meta-class的superclass找到Person的meta-class
3、通过Person的meta-class的superclass找到NSObject的meta-class
4、找到NSObject的meta-class中的alloc
类方法,进行调用
总结:
-
instance的isa指向class
-
class的isa执行meta-class
-
meta-class的isa指向基类的meta-class
-
class的superclass指向父类的class
如果没有父类,class的superclass指向nil -
meta-class的superclass指向父类的meta-class
基类的meta-class的superclass指向基类的class -
对象方法调用轨迹
对象通过isa找到class,方法不存在,通过class的superclass找父类,然后再找对象方法 -
类方法调用轨迹
类通过isa找到meta-class,方法不存在,通过meta-class的superclass找父类,然后再找类方法
网友评论