Cocoa valueForKey:NSMutableDictionary是否对NSString使用copy?
我有一个Cocoa valueForKey:NSMutableDictionary是否对NSString使用copy?,cocoa,copy,nsdictionary,kvc,Cocoa,Copy,Nsdictionary,Kvc,我有一个NSMutableDictionary,有十几个键,每个键都引用一个NSString值。如果我调用[myDictionary valueForKey:@“abc”]我将得到一个NSString对象 这是NSString复制的吗 由于没有@property声明,检索字符串会发生什么?我想我得到了一份。与NSMutableString有什么不同吗 我的目的是拥有一系列nsdictionary。我在数组上调用valueForKey,从字典集合中获取所有@“abc”键。因此,我现在有一个NSSt
NSMutableDictionary
,有十几个键,每个键都引用一个NSString
值。如果我调用[myDictionary valueForKey:@“abc”]
我将得到一个NSString
对象
这是NSString
复制的吗
由于没有@property
声明,检索字符串会发生什么?我想我得到了一份。与NSMutableString
有什么不同吗
我的目的是拥有一系列nsdictionary
。我在数组上调用valueForKey
,从字典集合中获取所有@“abc”键。因此,我现在有一个NSString数组
我需要将该数组传递给后台线程上的
NSOperation
。因此,NSStrings
需要是副本,以便以后修改字典不会导致传递给NSOperation
的字典发生更改。来自-[NSDictionary valueForKey:][/code>的文档:
如果键不以“@”开头,则调用objectForKey:。如果键以“@”开头,则去掉“@”并用键的其余部分调用[super valueForKey:]
从-[NSMutableDictionary setObject:forKey:][/code>的文档中:
如果字典中已经存在aKey,则另一个对象将取代它
valueForKey:
不复制对象<代码>设置对象:forKey:
替换对象,但不修改对象。如果你这样做
[mutableDictionary setObject:@"klm" forKey:@"abc"];
a = [mutableDictionary valueForKey:@"abc"];
[mutableDictionary setObject:@"xyz" forKey:@"abc"];
现在a
是@“klm”
的文档中的旧值-[NSDictionary valueForKey:][/code>:
如果键不以“@”开头,则调用objectForKey:。如果键以“@”开头,则去掉“@”并用键的其余部分调用[super valueForKey:]
从-[NSMutableDictionary setObject:forKey:][/code>的文档中:
如果字典中已经存在aKey,则另一个对象将取代它
valueForKey:
不复制对象<代码>设置对象:forKey:
替换对象,但不修改对象。如果你这样做
[mutableDictionary setObject:@"klm" forKey:@"abc"];
a = [mutableDictionary valueForKey:@"abc"];
[mutableDictionary setObject:@"xyz" forKey:@"abc"];
现在a
是旧值@“klm”
NSDictionary
键在设置时被复制。在codedictionary[key]=value
中,复制key
对象,并且dictionary保留副本。值
对象未被复制;调用方和字典共享对同一对象的引用
检索键或对象时,不进行复制<代码>字典。allKeys
返回字典中键对象的数组,而不是副本。类似地,dictionary[key]
返回对dictionary中key
的值的引用
正如您所知,@属性(copy)
仅在设置值时适用。ObjC getter从不复制对象,除非它是以这种方式专门记录的,或者您自己编写,这样它就可以复制对象
同样,为了回答您的问题,键值方法对该属性使用相同的基线规则。因此,-setValue:forKey:
,-setValue:forKeyPath:
,-valueForKey:
,-valueForKeyPath:
等将获取或设置正确的值,就像您直接访问属性一样。换句话说,如果在设置属性时复制了该值,-setValue:forKeyPath:
将复制该值。如果访问者没有复制该值,则-valueForKey:
不会复制该值。NSDictionary
键在设置时被复制。在codedictionary[key]=value
中,复制key
对象,并且dictionary保留副本。值
对象未被复制;调用方和字典共享对同一对象的引用
检索键或对象时,不进行复制<代码>字典。allKeys
返回字典中键对象的数组,而不是副本。类似地,dictionary[key]
返回对dictionary中key
的值的引用
正如您所知,@属性(copy)
仅在设置值时适用。ObjC getter从不复制对象,除非它是以这种方式专门记录的,或者您自己编写,这样它就可以复制对象
同样,为了回答您的问题,键值方法对该属性使用相同的基线规则。因此,-setValue:forKey:
,-setValue:forKeyPath:
,-valueForKey:
,-valueForKeyPath:
等将获取或设置正确的值,就像您直接访问属性一样。换句话说,如果在设置属性时复制了该值,-setValue:forKeyPath:
将复制该值。如果访问者没有复制该值,则-valueForKey:
不会复制该值