3

我想保留mutable array引用了一组UIViewsNSMapTable非常适合这种需求,除了一个细节... NSMapTable想要一个关键的每个价值它拥有。是否有NSMaptable的NSMutableArray版本?

有没有像NSMapArray?如果没有,我是否需要为我存储的所有值生成丢弃唯一键?我应该使用NSUUID来生成密钥名称吗?

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

+2

**地图**的重点在于它具有_key_和_value_。如果你不想要_key_部分,那么你不需要一个** map **,你想要一个** set **。 – anthropomorphic 2013-03-26 06:35:45

+1

NSSet/NSOrderdSet及其可变版本可以在没有密钥的情况下为您服务。 – 2013-03-26 06:35:49

+0

NSSet/NSOrderdSet只存储弱引用? – zakdances 2013-03-26 06:48:13

回答

1

您可以尝试在iOS 6中,这就像一个NSSet,与弱引用支持NSHashTable(和NSPointerArray看起来不错过,但医生说这不支持ARC下弱参考)。

编辑:有些人似乎认为与文档所述相反,NSPointerArray确实 ARC下的零弱引用。 OS X 10.8 Foundation发行说明也这样说,即使类文档中有相反的说明(iOS发行说明中没有说)。毕竟,这就是为什么他们在OS X 10.8和iOS 6.0中添加了+ weakObjectsPointerArray构造函数和NSPointerFunctionsWeakMemory选项...您应该尝试...

+0

这很好,我不知道关于NSHashTable。有没有这样的有序集? – zakdances 2013-03-26 11:40:40

+0

正如我在编辑中所说的那样,即使文档在iOS中的ARC下是否会引用零弱引用,也应该尝试使用'NSPointerArray'。它看起来像是,文档已过时,但在做出假设之前,您一定要尝试。 – Guillaume 2013-03-26 13:48:25

+0

这听起来像我正在寻找的东西。从文档:'在垃圾收集环境中,如果您指定了一个清零弱存储器配置,如果收集到一个元素,则将其替换为NULL值。“这并不令人困惑。 – zakdances 2013-03-26 13:50:58

0

你说在数组中存储弱引用很重要。这可以使用Core Foundation阵列。你会在这里找到答案:Non-retaining array for delegates

+0

这是迄今为止最好的答案,但是我问这个问题,看看是否有更好的答案比分类或CFArray黑客。正如你可能已经阅读过评论,这种方法存在一些问题(例如,参考文献不会是自我零)。 – zakdances 2013-03-26 06:58:18

0

你说的有点矛盾:一方面你说你想要他们要将弱引用调零,在这种情况下,您的数组在被释放后将被填充nil元素。另一方面,你说你想要它像NSMapTable,它可能会在弱引用被释放后删除元素。这是什么?

如果你希望它是真正的零弱引用(这将离开你的数组中的元素nil),一个很好的解决方案是使用一个std::vector<id __weak> - 其元素归零弱引用一个C++载体。 ARC将处理所有细节。

+0

我的理解是nsarrays不能保存零值 – zakdances 2013-05-06 14:36:10

+1

@yourfriendzak:嗯,这就是OP要求的 - “自我调零参考”。 – newacct 2013-05-06 23:30:24

相关问题