如何在启用了 ARC 的 OS X 10.7 上创建具有弱引用的对象字典 - 也就是说,字典不保留其键和值?NSMapTable 看起来很有前途,但不幸的是,当启用 ARC 时,它不使用弱引用。
NSMapTable确实是你想要的。
10.8+:
特别是在您的情况下,听起来您想使用它:
+ (id)弱到弱对象映射表返回值一个新的映射表对象,它对键和值的引用较弱。
从文档中:
主要选项是"弱"保存键和/或值,以便在回收其中一个对象时删除条目。
您可以根据需要使用+ (id)weakToWeakObjectsMapTable
或+ (id)weakToStrongObjectsMapTable
的快捷方式类方法。
另请参阅NSMapTableOptions
,了解如何为其他初始值设定项指定行为。
NSMapTableWeakMemory
使用适用于 ARC 或 GC 的弱读写屏障。使用 NSPointerFunctionsWeakMemory 对象引用将在上一版本上变为 NULL。等于 NSMapTableZeroingWeakMemory。
10.7+:
在选项中使用– initWithKeyOptions:valueOptions:capacity:
和传递NSMapTableZeroingWeakMemory
(假设您的对象是"弱引用安全")或者,您可以使用– initWithKeyPointerFunctions:valuePointerFunctions:capacity:
并指定自定义函数,如果内置函数都不适合您/在您的版本上不可用。(也许其中一个"不透明"的人格会适合你)