我有一堆Boy对象和一堆Girl对象。我想列出每个男孩最喜欢的女孩名单。如果多个男孩喜欢同一个女孩,那就没关系了。
我打算使用NSMutableDictionary,但该类的setObject:forKey:方法在将该对添加到字典之前复制该键。因此,而不是男孩喜欢这个女孩,我们会有一个喜欢这个女孩的男孩的克隆。
通常我会通过向Boy类添加favoriteGirl属性来完成此操作。但问题是这些男孩真的是UIView对象,所以我必须继承一堆不同的UIView子类。
显然我可以编写自己的自定义类来执行此操作。 。 。但感觉苹果必须有一个简单的方法来做我想要的。 。 。我错过了什么?
查找速度很重要。
我想到的一个选项是在UIView对象上实现复制作为一个类别,并且让方法保留该对象。但我对这可能产生的副作用感到紧张。
编辑:女孩不是UIViews。它们是包含男孩们不时想要参考的信息的对象。答案 0 :(得分:2)
您可以使用CFMutableDictionaryRef
(核心基础相当于NSMutableDictionary
)执行此操作。您可以指定关于键和值的行为方式的不同选项(例如,是保留还是复制它们等)。
答案 1 :(得分:1)
使用[NSValue valueWithNonretainedObject:]
作为键是更好的方法,但要非常小心,不要保留对象,因此在释放原始对象时必须确保将其从字典中删除。
答案 2 :(得分:0)
我不确定我是否理解该模型。是不是你希望能够将每个男孩映射到一个最喜欢的女孩?那么,从男孩到女孩的矢量地图可以吗?如果是这样,你可以使用std :: map,std :: vector> ......换句话说,转到Objective-C ++并使用标准模板库的地图和矢量容器。
答案 3 :(得分:0)
在我看来,你真正需要的是男孩和女孩的独立模型课程(如果他们真的不同,可能是BoyView和GirlView,否则可能是一个简单的PersonView)。
如果你有一个简单的类代表一个男孩或女孩,那么你可以覆盖isEqual:
,我认为将消除你的问题与NSDictionary复制键(虽然我不确定我完全理解你的模型。)