1

我有一堆男孩对象和一堆女孩对象。我想保留一份每个男孩最喜欢的女孩的名单。如果多个男孩喜欢同一个女孩,那也没关系。

我打算使用 NSMutableDictionary,但该类的 setObject: forKey: 方法会在将密钥对添加到字典之前复制密钥。因此,与其说男孩喜欢女孩,不如说男孩喜欢女孩的克隆。

通常我会通过在 Boy 类中添加一个 favoriteGirl 属性来做到这一点。但问题是男孩子真的是 UIView 对象,所以我必须继承一堆不同的 UIView 子类。

显然我可以编写自己的自定义类来做到这一点。. . 但感觉苹果必须有一种简单的方法来做我想做的事。. . 我错过了什么?

查找的速度很重要。

我想到的一个选择是将复制实现为 UIView 对象上的一个类别,并让该方法保留该对象。但我担心这可能会产生什么副作用。

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

4

4 回答 4

2

您可以使用CFMutableDictionaryRef(Core Foundation 等效于NSMutableDictionary) 来做到这一点。您可以指定有关键和值的行为方式的不同选项(例如它们是保留还是复制等)。

于 2010-11-05T19:36:45.400 回答
1

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

于 2010-11-05T20:18:40.233 回答
0

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

于 2010-11-05T19:08:22.407 回答
0

在我看来,您真正需要的是男孩和女孩的单独模型类(如果它们实际上不同,则可能是 BoyView 和 GirlView,否则可能是简单的 PersonView)。

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

于 2010-11-05T19:16:13.097 回答