美文网首页
OC为什么不能动态添加实例变量

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

作者: xiaowu0125 | 来源:发表于2019-04-26 13:28 被阅读0次

    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注册后,才能被使用,也没有机会再添加成员变量了。

    相关文章

      网友评论

          本文标题:OC为什么不能动态添加实例变量

          本文链接:https://www.haomeiwen.com/subject/flpfnqtx.html