2010-11-05 31 views
1

我有一堆Boy对象和一堆Girl对象。我想保留每个男孩最喜欢的女孩的名单。如果多个男孩喜欢同一个女孩,那就没问题。iPhone - 有没有像NSMutableDictionary不复制其密钥?

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

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

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

查找的速度很重要。

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

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

回答

2

您可以用CFMutableDictionaryRef(核心基础相当于NSMutableDictionary)做到这一点。你可以指定不同的选项来说明键和值的行为方式(比如它们是保留还是复制等)。

0

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

0

这听起来对我说,你真正需要的是男孩和女孩单独的模型类(那么也许BoyView和GirlView如果他们实际上是不同的,否则也许一个简单的PersonView)。

如果你有一个简单的类来表示一个男孩或女孩,那么你就可以覆盖isEqual:认为会消除的NSDictionary复制钥匙您的问题(虽然我不知道我完全理解你的模型要么)。

1

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

相关问题