クラスのobjectForKey:
メソッドはオブジェクトのコピーを返しますか?NSMutableDictionary
aNSMutableArray
内に格納されていて、ディクショナリNSMutableDictionary
のメソッドでアクセスした配列にいくつかの変更(オブジェクトの追加など)を行ったobjectForKey:
場合、それらの変更はディクショナリ内に格納されている配列に対して有効ですか?
クラスのobjectForKey:
メソッドはオブジェクトのコピーを返しますか?NSMutableDictionary
aNSMutableArray
内に格納されていて、ディクショナリNSMutableDictionary
のメソッドでアクセスした配列にいくつかの変更(オブジェクトの追加など)を行ったobjectForKey:
場合、それらの変更はディクショナリ内に格納されている配列に対して有効ですか?
いいえ、コピーは返されません。
NSMutableArray *array = [NSMutableArray new];
NSMutableDictionary *dict = [NSMutableDictionary new];
NSLog(@"local instance of array: %p", array);
[dict setObject: array forKey: @"key"];
NSLog(@"returned from dictionary: %p", [dict objectForKey: @"key"]);
出力:
2012-09-16 14:06:36.879 Untitled 3[65591:707] local instance of array: 0x7f98f940a2f0
2012-09-16 14:06:36.884 Untitled 3[65591:707] returned from dictionary: 0x7f98f940a2f0
同じポインタが返されます。つまり、オブジェクトはコピーされていません。
もし、するなら
[collection setObject:obj forKey:key];
そのオブジェクトインスタンスをコレクション(辞書、配列、またはセット)内に配置します。
ディクショナリにオブジェクトのコピーを追加する場合は、これを行う必要があります
[collection setObject:[obj copy] forKey:key];
とにかく、objectForKey:メソッドは、コピーではなく、常に正確に入力したものを返します。