12.3 objc_object和objc_class结构体

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只是在编译期就已经决定的原数据。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容