RunTime 添加实例变量/Forward/weak置空
2020-05-13 本文已影响0人
行走在北方
不能向编译后的类添加实例变量?运行时创建类中则可以
因为编译后的类,在编译时已经确定,运行不可修改
class_ro_t 在类只读中已经确定了
ro结构体中的ivar_list_t也是不可以修改,并且它的instanceSize决定了创建对象时需要的空间的大小
运行时添加时,必须要在objc_allocateClassPair 和 objc_registerClassPair之间调用class_addIvar
Objc_msgForward函数是做什么的,直接调用它将会放生什么?
用于消息转发的一个IMP,也就是函数地址
当一个对象在方法列表中么有找到要实现的方法时,则会调用objc_msgForward方法函数
关联对象Associate方法关联对象,需要在dealloc中释放?
![](https://img.haomeiwen.com/i337293/ac6e5d8e71f3fc50.png)
weak对象存储原理和销毁为什么会置nil
objc_destructInstance --> sideTable_clearDeallocating()-->
weak_clear_no_lock-->refer == nil -->移除entry
![](https://img.haomeiwen.com/i337293/7346aba686bf0008.png)
![](https://img.haomeiwen.com/i337293/f4461c9bee95d579.jpg)