class_ro_t是在编译的时候⽣成的。当类在编译的时候,类的属性,实例⽅法,协议这些内容就存在class_ro_t这个结构体⾥⾯了,这是⼀块纯净的内存空间,不允许被修改。
class_rw_t是在运⾏的时候⽣成的,类⼀经使⽤就会变成class_rw_t,它会先将class_ro_t的内容"拿"过去(类似于剪切,不是复制),然后再将当前类的分类的这些属性、⽅法等拷⻉到class_rw_t⾥⾯。它是可读写的。
class_rw_ext_t可以减少内存的消耗。苹果在wwdc2020⾥⾯说过,只有⼤约10%左右的类需要动态修改。所以只有10%左右的类⾥⾯需要⽣成class_rw_ext_t这个结构体。这样的话,可以节约很⼤⼀部分内存
我们调用runtime api进行运行时更改,或者有分类存在,要进行更改时,实际上系统会生成class_rw_ext_t这个临时修改区域,供我们操作。也就是说,当类被使用期间,如果涉及到更改一些的值,或者动态变更的,系统会将原class_rw_t中的部分可操作数据拷贝到class_rw_ext_t,以供操作,其余的不会。我在想oc设计中如可变数组和不可变数组这中设计,是不是在这里有大用处?知道的人可以留言哈,谢谢。
网友评论