代码之家  ›  专栏  ›  技术社区  ›  William Jockusch

iphone-有没有像nsmutabledictionary这样不复制密钥的东西?

  •  1
  • William Jockusch  · 技术社区  · 14 年前

    我有一堆男孩的东西和一堆女孩的东西。我想列出每个男孩最喜欢的女孩。如果多个男孩都喜欢同一个女孩就可以了。

    我打算使用一个NSMutable字典,但是StObj:FrKE:Stand方法在将该对添加到字典之前复制密钥。所以,与其说男孩喜欢女孩,不如说我们有一个男孩喜欢女孩的克隆体。

    通常情况下,我会在男生班上添加一个FavoriteGirl属性。但问题是,这些男孩实际上是uiview对象,所以我必须对一系列不同的uiview子类进行子类化。

    显然,我可以编写自己的自定义类来完成这项工作。…但感觉苹果必须有一个简单的方法来做我想做的事情。…我错过了什么?

    查找速度很重要。

    我想到的一个选项是在uiview对象上实现复制作为一个类别,并让方法保留对象。但我担心这可能会有什么副作用。

    编辑:女孩不是uiview。它们是包含男孩们不时想要参考的信息的对象。

    4 回复  |  直到 14 年前
        1
  •  2
  •   Dave DeLong    14 年前

    你可以用一个 CFMutableDictionaryRef (核心地基当量) NSMutableDictionary )您可以指定有关键和值的行为方式的不同选项(例如它们是保留的还是复制的,等等)。

        2
  •  1
  •   tia    14 年前

    使用 [NSValue valueWithNonretainedObject:] 因为密钥是一种更好的方法,但是要小心不要保留对象,因此在释放原始对象时,必须确保将其从字典中删除。

        3
  •  0
  •   westsider    14 年前

    我不确定我是否理解这个模型。你想把每个男孩都映射到一个最喜欢的女孩吗?那么,有一张从男孩到女孩的矢量图就可以了吗?如果是这样,您可以使用std::map、std::vector>…换句话说,转到Objective-C++并使用标准模板库的映射和向量容器。

        4
  •  0
  •   Brian    14 年前

    在我看来,你真正需要的是为男孩和女孩提供单独的模型课程(如果男孩和女孩实际上不一样,那么可能是男孩视图和女孩视图,否则可能是简单的个人视图)。

    如果您有一个简单的类来表示一个男孩或女孩,那么您可以重写 isEqual: 哪一个 认为 将消除您对nsdictionary复制密钥的问题(尽管我也不确定我是否完全理解您的模型)。