typedef struct objc_object { Class isa; } *id;
Object的类中保存了该Object实现的所有方法(即实例方法),另外还有类中还保存了父类的指针,这样Object的方法调用过程可以描述如下:
- 1. 会根据isa找到类,
- 2. 从类中寻找方法,
- 3. 找到的话,直接执行。
- 4. 没找到的话,继续沿着父类的指针往上找,直到找到为止。
- 5. 最后都没找到,则报错。
在Object-C中,类同样是一个Object,类实例同样有自己的isa,这就是元类。元类中保存了所有的类方法和父元类的指针。现在我们知道,对象是类的实例,类是元类的实例,那么元类呢? 元类是根元类的实例,根元类呢? 根元类是自己的实例,循环到此收尾。这就是整个Object-C语言的寻类过程。
那么,继承关系呢?Object-C中类的继承和元类的继承是并行的,如果类之间继承了,那么他们的元类也就继承了,直到根元类,根元类的父类是根类。这就是整个Object-C的对象模型。