如果我有这样的东西:
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
中的对象也被更新?我假设集合正在存储和发出指针。
最佳答案
是的,你说得对。
在 NSMuteableArray *arr
和NSMutableDictionary *dict
将存储对对象 SomeObject *obj
的引用。当您调用[dict objectForKey:@"key"];
时您会在表达式 objFromDict.someIvar = 5200;
中获得此引用您正在修改property
someIvar
.
当您尝试从arr
获取相同的对象时someIvar
的值由于数组和字典仅存储对实例的引用,因此也会发生更改。
关于objective-c - 我可以通过仅在一个集合中更改存储在两个集合中的对象来更新该对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8075425/