4

クラスのobjectForKey:メソッドはオブジェクトのコピーを返しますか?NSMutableDictionary

aNSMutableArray内に格納されていて、ディクショナリNSMutableDictionaryのメソッドでアクセスした配列にいくつかの変更(オブジェクトの追加など)を行ったobjectForKey:場合、それらの変更はディクショナリ内に格納されている配列に対して有効ですか?

4

2 に答える 2

9

いいえ、コピーは返されません。

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

同じポインタが返されます。つまり、オブジェクトはコピーされていません。

于 2012-09-16T13:08:07.503 に答える
1

もし、するなら

[collection setObject:obj forKey:key];

そのオブジェクトインスタンスをコレクション(辞書、配列、またはセット)内に配置します。

ディクショナリにオブジェクトのコピーを追加する場合は、これを行う必要があります

[collection setObject:[obj copy] forKey:key];

とにかく、objectForKey:メソッドは、コピーではなく、常に正確に入力したものを返します。

于 2012-09-16T13:12:16.123 に答える