指向他的类对象,从而可以找到对象上的方法
对象的isa指向类,类的isa指向元类(meta class),元类isa指向元类的根类。isa帮助一个对象找到它的方法。
isa:是一个Class 类型的指针. 每个实例对象有个isa的指针,他指向对象的类,而Class里也有个isa的指针, 指向meteClass(元类)。元类保存了类方法的列表。当类方法被调用时,先会从本身查找类方法的实现,如果没有,元类会向他父类查找该方法。同时注意的是:元类(meteClass)也是类,它也是对象。元类也有isa指针,它的isa指针最终指向的是一个根元类(root meteClass).根元类的isa指针指向本身,这样形成了一个封闭的内循环。
图中实线是 super_class指针,虚线是isa指针。
1.Root class (class)其实就是NSObject,NSObject是没有超类的,所以Root class(class)的superclass指向nil。
2.每个Class都有一个isa指针指向唯一的Meta class
3.Root class(meta)的superclass指向Root class(class),也就是NSObject,形成一个回路。
4.每个Meta class的isa指针都指向Root class (meta)。
元类
元类
也是类,是描述Class
类对象的类。Person *person = [[Person alloc] init]; Class aclass = [Person class];复制代码
一切皆对象。每一个对象都对应一个类。
Person
类就是person
变量对象的类,换句话说就是person
对象的isa指向Person
对应的结构体的类;aclass
也是对象,描述它的类就是元类,换句话说aclass
对象的isa指向的就是元类