OC为什么不能动态添加实例变量
2019-04-26 本文已影响0人
xiaowu0125
OC动态添加实例变量就要用到这个方法:
class_addIvar(Class_Nullablecls,constchar*_Nonnullname, size_t size, uint8_t alignment,constchar*_Nullabletypes)
官方文档在苹果的文档里,已经说得很详细了,不能向已存在的类添加实例变量。
而且要想使用这个方法,还必须在objc_allocateClassPair实现之后,和objc_registerClassPair实现之前使用。
这两个方法是构建一个新类,和对新生成的类进行注册。
程序在编译的时候,编译器会生成实例变量的内存布局ivar layout,告诉运行时去哪里访问类的实例变量。一旦完成了类定义,就不能再添加成员变量了。编译后的类,在程序启动后,就被runtime加载了,就没有机会调用class_addIvar了。
动态构建的类需要调用objc_registerClassPair注册后,才能被使用,也没有机会再添加成员变量了。