美文网首页
问题:一个objc对象的isa的指针指向什么?有什么作用?

问题:一个objc对象的isa的指针指向什么?有什么作用?

作者: 姜小舟 | 来源:发表于2020-05-12 13:04 被阅读0次

指向他的类对象,从而可以找到对象上的方法

对象的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指向的就是元类

相关文章

网友评论

      本文标题:问题:一个objc对象的isa的指针指向什么?有什么作用?

      本文链接:https://www.haomeiwen.com/subject/arqbnhtx.html