黑马程序员技术交流社区
标题:
ISA指针
[打印本页]
作者:
LEON27
时间:
2015-7-1 23:49
标题:
ISA指针
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指针。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2