OC为什么不能动态添加实例变量

OC动态添加实例变量就要用到这个方法:

class_addIvar(Class_Nullablecls,constchar*_Nonnullname, size_t size, uint8_t alignment,constchar*_Nullabletypes) 

OC为什么不能动态添加实例变量_第1张图片
官方文档

在苹果的文档里,已经说得很详细了,不能向已存在的类添加实例变量。

而且要想使用这个方法,还必须在objc_allocateClassPair实现之后,和objc_registerClassPair实现之前使用。

这两个方法是构建一个新类,和对新生成的类进行注册。

程序在编译的时候,编译器会生成实例变量的内存布局ivar layout,告诉运行时去哪里访问类的实例变量。一旦完成了类定义,就不能再添加成员变量了。编译后的类,在程序启动后,就被runtime加载了,就没有机会调用class_addIvar了。

动态构建的类需要调用objc_registerClassPair注册后,才能被使用,也没有机会再添加成员变量了。

你可能感兴趣的:(OC为什么不能动态添加实例变量)