我有一个带有十几个键的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"

10-08 07:49
查看更多