是否有NSMapTable的NSMutableArray版本?

时间:2013-03-26 06:32:27

标签: ios objective-c nsmutablearray nsmutabledictionary weak-references

我想对一组mutable array保持UIViews引用。 NSMapTable非常适合这种需求,除了一个细节...... NSMapTable想要一个关键字来保存它。

NSMapArray之类的东西吗?如果没有,我是否需要为我存储的所有值生成一次性的唯一键?我应该使用NSUUID生成密钥名称吗?

编辑:请注意,我说的是真正的,自我归零的引用。 CFArrays和NSValue解决方案存储引用,这些引用在引用的对象被释放时不会自行解决......它们最终会成为垃圾指针。

3 个答案:

答案 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将处理所有细节。