来看一张经典的描述 isa
和 superclass
指向的图。
从这我们可以看到:
isa
- instance的isa指向class
- class的isa指向meta-class
- meta-class的isa指向基类的meta-class
superclass
- class的superclass指向父类的class
如果没有父类,superclass指针为nil - meta-class的superclass指向父类的meta-class
基类的meta-class的superclass指向基类的class
方法调用
- instance调用对象方法的轨迹
isa找到class,方法不存在,就通过superclass找父类 - class调用类方法的轨迹
isa找meta-class,方法不存在,就通过superclass找父类
下面通过代码来确定一下
1 |
|
我们再看一下 objc_allocateClassPair
方法内部实现
1 | Class objc_allocateClassPair(Class superclass, const char *name, size_t extraBytes) |