Object-C的对象模型

在Object-C的类型结构中,有几个比较重要的概念Object(实例),Class(类),Metaclass(元类),Rootclass(根类),Rootclass‘s metaclass(根元类)。有面向对象编程语言背景的同学可以很容易理解类和实例。在Object-C中,Object本质上是一个struct,在这个struct中会保存一个名为isa的指针,该指针会指向该Object的类。如下:

typedef struct objc_object {
Class isa;
} *id;

Object的类中保存了该Object实现的所有方法(即实例方法),另外还有类中还保存了父类的指针,这样Object的方法调用过程可以描述如下:

[list]
[*]1. 会根据isa找到类,
[*]2. 从类中寻找方法,
[*]3. 找到的话,直接执行。
[*]4. 没找到的话,继续沿着父类的指针往上找,直到找到为止。
[*]5. 最后都没找到,则报错。
[/list]

在Object-C中,类同样是一个Object,类实例同样有自己的isa,这就是元类。元类中保存了所有的类方法和父元类的指针。现在我们知道,对象是类的实例,类是元类的实例,那么元类呢? 元类是根元类的实例,根元类呢? 根元类是自己的实例,循环到此收尾。这就是整个Object-C语言的寻类过程。

那么,继承关系呢?Object-C中类的继承和元类的继承是并行的,如果类之间继承了,那么他们的元类也就继承了,直到根元类,根元类的父类是根类。这就是整个Object-C的对象模型。

[img]http://dl2.iteye.com/upload/attachment/0089/4172/cc9e0bf6-3bc8-3277-a155-905230bf6fcc.png[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值