NSMutableDictionary的objectForKey:方法会返回副本还是对象本身?

时间:2012-09-16 13:02:45

标签: iphone ios cocoa-touch nsdictionary

objectForKey:类的NSMutableDictionary方法是否返回对象的副本?

如果我在NSMutableArray中存储了NSMutableDictionary并且我对使用字典的objectForKey:方法访问的数组进行了一些修改(例如添加对象)那些修改对存储在字典中的数组有效吗?

2 个答案:

答案 0 :(得分:9)

不,它不会返回副本。

NSMutableArray *array = [NSMutableArray new];
NSMutableDictionary *dict = [NSMutableDictionary new];

NSLog(@"local instance of array: %p", array);

[dict setObject: array forKey: @"key"];

NSLog(@"returned from dictionary: %p", [dict objectForKey: @"key"]);

输出:

2012-09-16 14:06:36.879 Untitled 3[65591:707] local instance of array: 0x7f98f940a2f0
2012-09-16 14:06:36.884 Untitled 3[65591:707] returned from dictionary: 0x7f98f940a2f0

返回相同的指针,表示该对象尚未复制。

答案 1 :(得分:1)

如果你这样做

[collection setObject:obj forKey:key];

您将该对象实例放入集合(字典,数组或集合)中。

如果要在字典中添加对象的副本,则必须执行此操作

[collection setObject:[obj copy] forKey:key];

无论如何,objectForKey:方法总是返回你输入的内容,而不是它的副本。