isa指针

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指针指向自己,这样就形成一个闭环。


下面看一下继承关系:

继承关系.jpg

从图中不难看出来

你可能感兴趣的:(isa指针)