2011-11-10 53 views
2

如果我有这样的事情:我可以通过只更改一个对象来更新存储在两个集合中的对象吗?

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 *arrNSMutableDictionary *dict将被存储参考对象SomeObject *obj。当您拨打[dict objectForKey:@"key"];时,您将获得该参考文献,并在表达式objFromDict.someIvar = 5200;中修改propertysomeIvar

当您尝试从arr获取同一对象时,someIvar的值也会因为数组和字典存储对实例的引用而发生更改。

+0

非常好。感谢您重申这一点。 –

相关问题