的NSMutableDictionary。使用对象存储整数值

时间:2011-10-26 15:53:28

标签: objective-c

我想将自定义类的实例添加到NSMutableDictionary中,以便每个实例都有一个对应的整数值?我后来希望能够使用类实例作为键来检索整数值。

2 个答案:

答案 0 :(得分:2)

  1. NS*Dictionary需要键和值的对象。如果要将整数推送到集合实例(字典,数组,集等)中,则必须先使用NSNumber将其“装箱”; [NSNumber numberWithInt:x];

  2. NSMutableDictionary的密钥通常需要是可复制的,并且必须具有稳定的散列和稳定的isEqual:behavior(根据文档)。因此,您的自定义类的实例必须符合NSCopying协议,并且必须正确支持hashisEqual:。如果指针相等性足够好,hashisEqual:可能“正常工作”。复制可能很棘手。

  3. 但是,一般情况下,实例和整数值之间很少有映射。为什么不在您的班级中添加@property

    @property int magicNumber;
    

    更直接,也更有效率。


    另请注意,如果您需要将某些内容与无法修改该类的现有实例相关联,则应使用objc_setAssociatedObject()objc_getAssociatedObject()。它们不要求实例具有NSCopying能力并且也相对有效(尽管效率不如@property)。

答案 1 :(得分:0)

您应该可以简单地使用[myMutableDict setObject: [NSNumber numberWithInt: myInt] forKey: myClassInstance];

至少这就是我读出的事实,即set Object将(id)作为参数类型。 :)