是否可以向使用运行时创建的类添加归零弱引用(在 ARC 意义上,而不是 GC)实例变量?如果是怎么办?
有一个名为 class_setWeakIvarLayout()
的函数似乎与此相关,但文档(针对此函数和非弱对应函数)非常薄不幸的是。
最佳答案
您可以使用容器类的关联引用来实现归零弱引用。基本上:
- 您的容器类包含一个单独的 ivar,声明为
__weak id
- 关联引用“setter”创建一个容器,设置
__weak id
ivar 以指向您的对象,然后使用objc_setAssociatedObjects(self,&key,container,OBJC_ASSOCIATION_RETAIN) 存储容器
- 您的 getter 使用
objc_getAssociatedObject(self, &key)
检索容器并返回__weak id
ivar。如果您的对象已被解除分配
,则容器的__weak id ivar
将为零。
关于objective-c - 使用运行时将弱 ivar 添加到 Objective-C 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11594339/