2011-11-10 4 views
2

私はこのようなものがある場合:2つのコレクションに格納されたオブジェクトを1つだけ変更して更新できますか?

SomeObject *obj = [[SomeObject alloc] init]; 
obj.someIvar = 100; 

NSMuteableArray *arr = [[NSMutableArray alloc] initWithCapacity:10]; 
[arr addObject:obj]; 

NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:50]; 
[dict setValue:obj forKey:@"key"]; 

[obj release]; 

が、私はそうのようなOBJを更新することができます。

SomeObject *objFromDict = [dict objectForKey:@"key"]; 
objFromDict.someIvar = 5200; 

を...とarr内のオブジェクトも同様に更新されることを期待?コレクションがポインタを格納していると仮定しています。

答えて

3

はい、あなたは正しいです。

NSMuteableArray *arrおよびNSMutableDictionary *dictは、オブジェクトSomeObject *objを参照して保存されます。 [dict objectForKey:@"key"];を呼び出すと、この参照が得られます。objFromDict.someIvar = 5200;の式では、propertysomeIvarが変更されています。

arrから同じオブジェクトを取得しようとすると、配列のためにsomeIvarの値も変更され、辞書はインスタンスへの参照を格納するだけです。

+0

優れています。それを再確認していただきありがとうございます。 –

関連する問題