我想将自定义类的实例添加到NSMutableDictionary中,以便每个实例都有一个对应的整数值?我后来希望能够使用类实例作为键来检索整数值。
答案 0 :(得分:2)
NS*Dictionary
需要键和值的对象。如果要将整数推送到集合实例(字典,数组,集等)中,则必须先使用NSNumber
将其“装箱”; [NSNumber numberWithInt:x];
。
NSMutableDictionary
的密钥通常需要是可复制的,并且必须具有稳定的散列和稳定的isEqual:behavior(根据文档)。因此,您的自定义类的实例必须符合NSCopying
协议,并且必须正确支持hash
和isEqual:
。如果指针相等性足够好,hash
和isEqual:
可能“正常工作”。复制可能很棘手。
但是,一般情况下,实例和整数值之间很少有映射。为什么不在您的班级中添加@property
?
即
@property int magicNumber;
更直接,也更有效率。
另请注意,如果您需要将某些内容与无法修改该类的现有实例相关联,则应使用objc_setAssociatedObject()
和objc_getAssociatedObject()
。它们不要求实例具有NSCopying
能力并且也相对有效(尽管效率不如@property
)。
答案 1 :(得分:0)
您应该可以简单地使用[myMutableDict setObject: [NSNumber numberWithInt: myInt] forKey: myClassInstance];
至少这就是我读出的事实,即set Object将(id)作为参数类型。 :)