0

如何在启用 ARC 的 OS X 10.7 上创建具有弱引用的对象字典(即字典不保留其键和值)?NSMapTable 看起来很有希望,但不幸的是,在启用 ARC 时它不使用弱引用。

4

1 回答 1

0

NSMapTable 确实是你想要的。

10.8+:

特别是在你的情况下,听起来你想使用这个:

+ (id)weakToWeakObjectsMapTable
返回值
一个新的映射表对象,它对键和值具有弱引用。

来自文档

主要的选择是让键和/或值“弱”保存,以便在回收其中一个对象时删除条目。

您可以使用快捷方式类方法+ (id)weakToWeakObjectsMapTable+ (id)weakToStrongObjectsMapTable根据您的需要。

另请参阅NSMapTableOptions以了解如何为其他初始化程序指定行为。

NSMapTableWeakMemory使用适用于ARC或 GC
的弱读写屏障。使用 NSPointerFunctionsWeakMemory 对象引用将在上次发布时变为 NULL。等于 NSMapTableZeroingWeakMemory。

10.7+:

使用– initWithKeyOptions:valueOptions:capacity:并传入NSMapTableZeroingWeakMemory选项(假设您的对象是“弱引用安全”)或者– initWithKeyPointerFunctions:valuePointerFunctions:capacity:,如果没有内置函数适合您/您的版本不可用,您可以使用并指定自定义函数。(也许“不透明”的人物之一会为你工作)

于 2013-10-23T16:23:29.027 回答