iPhone - 有没有像NSMutableDictionary那样不复制其密钥的东西?

时间:2010-11-05 18:15:27

标签: iphone nsmutabledictionary

我有一堆Boy对象和一堆Girl对象。我想列出每个男孩最喜欢的女孩名单。如果多个男孩喜欢同一个女孩,那就没关系了。

我打算使用NSMutableDictionary,但该类的setObject:forKey:方法在将该对添加到字典之前复制该键。因此,而不是男孩喜欢这个女孩,我们会有一个喜欢这个女孩的男孩的克隆。

通常我会通过向Boy类添加favoriteGirl属性来完成此操作。但问题是这些男孩真的是UIView对象,所以我必须继承一堆不同的UIView子类。

显然我可以编写自己的自定义类来执行此操作。 。 。但感觉苹果必须有一个简单的方法来做我想要的。 。 。我错过了什么?

查找速度很重要。

我想到的一个选项是在UIView对象上实现复制作为一个类别,并且让方法保留该对象。但我对这可能产生的副作用感到紧张。

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

4 个答案:

答案 0 :(得分:2)

您可以使用CFMutableDictionaryRef(核心基础相当于NSMutableDictionary)执行此操作。您可以指定关于键和值的行为方式的不同选项(例如,是保留还是复制它们等)。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我不确定我是否理解该模型。是不是你希望能够将每个男孩映射到一个最喜欢的女孩?那么,从男孩到女孩的矢量地图可以吗?如果是这样,你可以使用std :: map,std :: vector> ......换句话说,转到Objective-C ++并使用标准模板库的地图和矢量容器。

答案 3 :(得分:0)

在我看来,你真正需要的是男孩和女孩的独立模型课程(如果他们真的不同,可能是BoyView和GirlView,否则可能是一个简单的PersonView)。

如果你有一个简单的类代表一个男孩或女孩,那么你可以覆盖isEqual:,我认为将消除你的问题与NSDictionary复制键(虽然我不确定我完全理解你的模型。)