我可以通过仅更改一个对象来更新存储在两个集合中的对象吗?

时间:2011-11-10 05:40:40

标签: objective-c cocoa pointers collections nsdictionary

如果我有这样的话:

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 个答案:

答案 0 :(得分:3)

是的,你是对的。

NSMuteableArray *arrNSMutableDictionary *dict中将存储对象SomeObject *obj的引用。当您致电[dict objectForKey:@"key"];时,您会收到此引用,并在表达式objFromDict.someIvar = 5200;中修改property someIvar

当您尝试从arr获取相同的对象时,由于数组和字典只存储对实例的引用,因此someIvar的值也将更改。