我想对一组mutable array
保持UIViews
个弱引用。 NSMapTable
非常适合这种需求,除了一个细节...... NSMapTable
想要一个关键字来保存它。
有NSMapArray
之类的东西吗?如果没有,我是否需要为我存储的所有值生成一次性的唯一键?我应该使用NSUUID
生成密钥名称吗?
编辑:请注意,我说的是真正的弱,自我归零的引用。 CFArrays和NSValue解决方案存储引用,这些引用在引用的对象被释放时不会自行解决......它们最终会成为垃圾指针。
答案 0 :(得分:1)
您可以在iOS 6上尝试NSHashTable
,就像NSSet
一样,支持弱引用(NSPointerArray
看起来也不错,但是文档说它确实不支持ARC 下的弱引用。
编辑:有些人似乎认为与文档所说的相反,NSPointerArray
在ARC下 零弱引用。 OS X 10.8基金会发行说明就是这么说的,尽管类文档说的相反(iOS发行说明没有说)。毕竟,这就是他们在OS X 10.8和iOS 6.0中添加+ weakObjectsPointerArray
构造函数和NSPointerFunctionsWeakMemory
选项的原因......你应该尝试...
答案 1 :(得分:0)
你说在数组中存储弱引用很重要。使用Core Foundation阵列可以实现这一点。你会在这里找到答案:Non-retaining array for delegates。
答案 2 :(得分:0)
你所说的有点矛盾:一方面你说你希望它们归零弱引用,在这种情况下你的数组在被释放后会被nil
元素填充。另一方面,你说你希望它像NSMapTable
,它可以在弱引用被释放后删除元素。这是什么?
如果你想让它真正归零弱引用(它会在你的数组中留下nil
元素),一个好的解决方案是使用std::vector<id __weak>
- 一个C ++向量,其元素归零引用。 ARC将处理所有细节。