美文网首页
12.3 objc_object和objc_class结构体

12.3 objc_object和objc_class结构体

作者: 哈库呐玛塔塔__ | 来源:发表于2020-05-15 00:32 被阅读0次

objc_object定义

在OC中每个对象都是一个结构体,结构体中都包含一个isa_t类型的成员变量,位于成员变量的第一位。

objc_class定义

objc_class继承于objc_object,也就是说一个ObjC类本身同时也是一个对象,为了处理类和对象的关系,runtime库创建了一种叫做元类(Meta Class)的东西,类对象所属类型就叫做元类

我们常用的Class 其实是一个指向 objc_class 结构体的指针。

上图中所示结构体中,superclass是一个指向父类结构体的指针,cache用于对通过方法名字查找方法实现指针IMP的一个优化。

这个结构体中最重要的是class_data_bits_t结构体,它包括太多信息。这里我只说下最为重要的部分:class_rw_t;

再说class_rw_t结构体之前先看看class_rw_t结构体中的常量class_ro_t

两个结构体都包含了关于类的属性,方法,成员变量等信息。

class_ro_t是在编译期决定的,它的结构体是不可变的,在编译期会给 instanceStart 和 instanceSize 赋值,确定好编译时每个类的所占内存区域起始偏移量和大小。

而class_rw_t提供了运行时对类拓展的能力,在运行时,在类第一次初始化时通过调用 realizeClass函数完成了rw的初始化,在methodizeClass(cls);函数中完成的赋值。如果在运行时动态修改,也就是对rw的操作,ro只是在编译期就已经决定的原数据。

相关文章

网友评论

      本文标题:12.3 objc_object和objc_class结构体

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