使用NSObjects作为NSDictionary的键?

时间:2012-08-23 12:27:00

标签: objective-c nsdictionary

我有这个扩展NSObject的BasicNode接口。

在某些时候,我需要使用它的一个实例作为字典的键:

BasicNode *node = [BasicNode node];
[aMutableDictionary setObject:@"hello" forKey:node]

这会导致程序崩溃,“信号SIGABRT”。在Java中,hashmap会在对象上调用默认的哈希方法来获取其密钥。是否有一种机制在objC中实现允许使用对象作为NS(Mutbale)字典的键?

1 个答案:

答案 0 :(得分:2)

是的,您可以将NSObject继承用作Key,但必须实现

 + (id)copyWithZone:(NSZone *)zone

方法,这是使用密钥的要求。 要实现它,你自己的类是这样的:

 - (id)copyWithZone:(NSZone *)zone {
      MyObject *objectCopy = [[MyObject allocWithZone:zone] init];
      // Copy over all instance variables from self to objectCopy.
      // Use deep copies for all strong pointers, shallow copies for weak.
      return objectCopy;
 }

这是来自this博文!

祝你好运!