- 不能向编译后得到的类中怎家实例变量;
- 能向运行时创建的类中添加实例变量;
原因:
- 因为编译后的类已经注册在 runtime 中,类结构体中的
objc_ivar_list实例变量的链表和instance_size实例变量的内存大小已经确定,同时 runtime 会调用class_setIvarLayout或class_setWeakIvarLayout来处理strong、weak引用,所以不能向存在的类中添加实例变量; - 运行时创建的类是可以添加实例变量,调用
class_addIvar函数。但是得在调用objc_allocatePair之后,objc_registerClass之前,原因同上。