isa指针
Object-c
作为一门面向对象的编程语言,每一个对象就是一个类的实例。
然而每一个对象都有一个isa
指针。
我们可以在NSObject.h
文件中看到这个isa
指针

在Object-c
中每一个类其实也是一个对象。所以每一个类都有一个isa
指针。
这可以从runtime-new.h
看出端倪
struct objc_class{
Class isa;
Class supeclass;//父类
cache_t cache;//方法缓存
classs_data_bit_t bits;//用于获取具体的类信息
}
那么既然类是一个对象,那么他就肯定是另一个类的实例,这个类就是元类(metaclass
)。元类保存了类方法的列表,当一个类方法被调用时,元类会首先查找他本身是否有该类方法的实现,如果没有,那么该元类会向他父类查找爱方法,这样可以一直找到继承链的头。
其实元类也是一个对象,那么元类的isa
指针又会指向谁呢?
为了设计上的完整,所有的元类的isa
指针都会只想一个根元类(root meta class
)。根元类的本身的isa
指针指向自己,这样就形成一个闭环。
下面看一下继承关系:

从图中不难看出来
网友评论