【问题标题】:iPhone -- is there anything like NSMutableDictionary that does not copy its keys?iPhone——有没有像 NSMutableDictionary 这样不复制其密钥的东西?
【发布时间】:2010-11-05 18:15:26
【问题描述】:

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

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

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

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

查找的速度很重要。

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

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

【问题讨论】:

    标签: iphone nsmutabledictionary


    【解决方案1】:

    您可以使用 CFMutableDictionaryRef(Core Foundation 等效于 NSMutableDictionary)来执行此操作。您可以为键和值的行为方式指定不同的选项(例如它们是保留还是复制等)。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-07-30
            • 2014-09-29
            • 1970-01-01
            • 1970-01-01
            • 2023-03-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多