我想将NSMutableDictionary
实例用作另一个NSMutableDictionary
.
NSMutableDictionary *stuff = [NSMutableDictionary dictionary];
NSMutableDictionary *first = [NSMutableDictionary dictionary];
[stuff setObject:@"A" forKey:first];
NSLog(@"I GOT %@",[stuff objectForKey:first]);
@"A"
正如预期的那样,这输出很好。
但是,如果之后我first
像这样修改对象中的值:
[first setObject:@"C" forKey:@"Something"];
我现在无法得到@"A"
:
NSLog(@"I GOT %@",[stuff objectForKey:first]);
哪个输出nil
。
我假设这objectForKey
会将键的内存地址与字典中的现有键进行比较 - 因为尽管更改了字典的内部值(我认为),但这样的内存地址不会改变,我希望它会起作用。
我设法让它使用不同的方法工作 - 通过使用NSString
s 作为键 - 字符串的值将是内存地址本身,如下所示:
NSMutableDictionary *stuff = [NSMutableDictionary dictionary];
NSMutableDictionary *first = [NSMutableDictionary dictionary];
[stuff setObject:@"A" forKey:[NSString stringWithFormat:@"%p",first]];
[first setObject:@"C" forKey:@"Something"];
NSLog(@"I GOT %@",[NSString stringWithFormat:@"%p",first]);
哪个有效,打印@"A"
。
我的问题:
- 为什么我原来的方法不起作用?