Могу ли я обновить объект, хранящийся в двух коллекциях, изменив его только в одной? - PullRequest
2 голосов
/ 10 ноября 2011

Если у меня есть что-то вроде этого:

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 также будет обновлен? Я предполагаю, что коллекции хранят и выдают указатели.

1 Ответ

3 голосов
/ 10 ноября 2011

Да, вы правы.

В NSMuteableArray *arr и NSMutableDictionary *dict будет сохранена ссылка на объект SomeObject *obj.Когда вы звоните [dict objectForKey:@"key"];, вы получаете эту ссылку, и в выражении objFromDict.someIvar = 5200; вы изменяете property someIvar.

Когда вы попытаетесь получить тот же объект из arr значение someIvar также будет изменен, поскольку массивы и словари просто хранят ссылки на экземпляры.

...