isa
-
实例对象
的isa 指向它的类对象
-
类对象
的isa 指向它的元类对象
元类对象的isa 指向基类的元类对象
基类的元类对象的isa指向它自己
superclass
- 类的superclass 指向 父类的类对象,如果没有父类, superclass指向nil
- 父类的superclass指向 基类的类对象
基类(NSObject)的superclass指向 nil
- 元类的superclass指向 父类的元类对象
- 父类的元类对象的superclass指向 基类的元类对象
基类的元类对象的superclass指向 基类的类对象(NSObject)
实例对象的查找方法流程
实例对象通过isa 找到其类对象, 如果找不到方法, 就 通过Superclass找到其父类对象
还找不到, 在继续通过superclass向上查找, 直接superclass = nil 也没找到,这就说明在整个继承体系里都找不到这个方法
类对象的查找方法的流程
类对象通过isa 找到其元类对象, 在元类对象的cache和 class_rw_t的方法列表中查找, 如果没有找到,
通过元类对象的superclass找到其 父类的元类对象的cache和 class_rw_t的方法列表中查找, 如果没有找到,
通过父类的元类对象的superclass找到其 基类的元类对象, 重复查找过程, 如果没有找到
通过基类的元类对象的superclass 找到其类对象, 基类的元类的superclass指针指向类对象(NSObject),相当于就是已经找到了NSObject,在还没找到就说明没有此方法
网友评论