A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© LEON27 中级黑马   /  2015-7-1 23:49  /  802 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Objective-C是一门面向对象的编程语言。
每一个  对象 都是一个类的实例。
每一个 象 对象 都有一个名为isa的指针,指向该对象的类。
每一个  类 描述了一系列它的实例的特点,包括成员变量的列表,成员函数的列表等。
每一个 象 对象 都可以接受消息,而对象能够接收的消息列表是保存在它所对应的类中。

       在XCode中按 Shift + Command + O , 然后输入NSObject.h和objc.h,可以打开NSObject的定义头文件,通过头文件我们可以看到,NSObject就是一个包含isa指针的结构体

       按照面向对象语言的设计原则,所有事物都应该是对象(严格来说Objective-C并没有完全做到这一点,因为它有象int, double这样的简单变量类型)。

       在Objective-C语言中,每一个类实际上也是一个对象。每一个类也有一个名为isa的指针。每一个类也可以接受消息,例如 [NSObject alloc] ,就是向NSObject这个类发送名为 alloc 消息。

因为类也是一个对象,那它也必须是另一个类的实列,这个类就是 元类( metaclass )。

       元类保存了类方法的列表。当一个类方法被调用时,元类会首先查找它本身是否有该类方法的实现,如果没有,则该元类会向它的父类查找该方法,直到一直找到继承链的头。

元类( metaclass )也是一个对象,那么元类的isa指针又指向哪里呢?为了设计上的完整, 所有的元类的isa指针都会指向一个根元类(root metaclass ) )。

      根元类(root metaclass)本身的isa指针指向自己,这样就行成了一个闭环。上面提到,一个对象能够接收的消息列表是保存在它所对应的类中的。
     在实际编程中,我们几乎不会遇到向元类发消息的情况,那它的isa指针在实际上很少用到。不过这么设计保证了面向对象的干净,即所有事物都是对象,都有isa指针。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马