如果我有这样的话:
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
中的对象也被更新?我假设集合正在存储并发出指针。
答案 0 :(得分:3)
是的,你是对的。
在NSMuteableArray *arr
和NSMutableDictionary *dict
中将存储对象SomeObject *obj
的引用。当您致电[dict objectForKey:@"key"];
时,您会收到此引用,并在表达式objFromDict.someIvar = 5200;
中修改property
someIvar
。
当您尝试从arr
获取相同的对象时,由于数组和字典只存储对实例的引用,因此someIvar
的值也将更改。