objective-c - 使用运行时将弱 ivar 添加到 Objective-C 类

标签 objective-c automatic-ref-counting weak-references objective-c-runtime

是否可以向使用运行时创建的类添加归零弱引用(在 ARC 意义上,而不是 GC)实例变量?如果是怎么办?

有一个名为 class_setWeakIvarLayout() 的函数似乎与此相关,但文档(针对此函数和非弱对应函数)非常薄不幸的是。

最佳答案

您可以使用容器类的关联引用来实现归零弱引用。基本上:

  1. 您的容器类包含一个单独的 ivar,声明为 __weak id
  2. 关联引用“setter”创建一个容器,设置 __weak id ivar 以指向您的对象,然后使用 objc_setAssociatedObjects(self,&key,container,OBJC_ASSOCIATION_RETAIN) 存储容器
  3. 您的 getter 使用 objc_getAssociatedObject(self, &key) 检索容器并返回 __weak id ivar。如果您的对象已被解除分配,则容器的__weak id ivar 将为零。

关于objective-c - 使用运行时将弱 ivar 添加到 Objective-C 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11594339/

相关文章:

objective-c - 具有特定位置的 MKMapItem

ios - 如何设置右侧导航栏按钮标题

ios - 在 block 中将 self 作为参数不会导致循环引用,但对 self 的外部引用会导致循环引用

iphone - 我该如何修复此错误 : "ARC forbids explicit message send of ' release' in Xcode"

objective-c - 如何在 clang 中使用 __weak 引用?

iphone - 如何保存照片并在照片上叠加标签?

objective-c - "performSelector may cause a leak"泄漏时的替代方案?

c# - 一个类轮 : WeakReference-to-a-Lambda Event Handler

objective-c - 为什么我不在传递给 dispatch_after() 的 block 中使用指向自身的弱指针?

objective-c - 限制后台线程的 CPU 使用率