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
ました。このようなメモリアドレスは、ディクショナリの内部値を変更しても変更されないため(私は思う)、機能すると思いました。
代わりにキーにsを使用することで、別のアプローチで動作させることができましNSString
た。文字列の値は、次のようにメモリアドレス自体になります。
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"
ます。
私の質問:
- 元のアプローチが機能しないのはなぜですか?