我有一个带有十几个键的NSMutableDictionary
,每个键都引用一个NSString
值。如果我调用[myDictionary valueForKey:@"abc"]
,我将得到一个NSString
对象。
此NSString
是否已复制?
由于没有@property
声明,因此检索字符串会发生什么?我想我得到了副本。 NSMutableString
有什么不同吗?
我的目的是我有一个NSDictionaries
数组。我在数组上调用valueForKey
以从字典集合中获取所有@“ abc”键。因此,我现在有了一个NSStrings数组。
我需要将该数组传递给后台线程上的NSOperation
。因此,NSStrings
必须是副本,以便以后修改字典不会导致传递给NSOperation
的字典被更改。
最佳答案
从-[NSDictionary valueForKey:]
的文档中:
如果键不是以“ @”开头,则调用objectForKey:。如果键的确以“ @”开头,则剥离“ @”并使用其余键调用[super valueForKey:]。
从-[NSMutableDictionary setObject:forKey:]
的文档中:
如果字典中已经存在aKey,则以anObject代替。valueForKey:
执行objectForKey:
并且不复制对象。 setObject:forKey:
替换对象,它不修改对象。如果你这样做
[mutableDictionary setObject:@"klm" forKey:@"abc"];
a = [mutableDictionary valueForKey:@"abc"];
[mutableDictionary setObject:@"xyz" forKey:@"abc"];
现在
a
是旧值@"klm"
。