Answers:
setValue:forKey:
是NSKeyValueCoding协议的一部分,该协议尤其使您可以从Interface Builder之类的对象中访问对象属性。setValue:forKey:
在之外的其他类中实现NSDictionary
。
setObject:forKey:
是NSMutableDictionary's
存在的理由。它的签名恰好类似于setValue:forKey :,但是更通用(例如,任何密钥类型)。签名如此相似有点偶然。
造成混乱的是,NSMutableDictionary的实现在大多数情况下setValue:forKey:
都等效setObject:forKey:
。在其他类中,setValue:forKey:
更改成员变量。在中NSMutableDictionary
,它将更改字典条目,除非您在键之前添加'@'字符-在这种情况下,它将修改成员变量。
因此,简而言之,setObject:forKey:
当您需要使用字典键和值时,以及setValue:forKey:
在极少数情况下需要解决KVP时,请使用。
编辑:哦,看来这已经被问过和回答了:objectForKey和valueForKey之间的区别?
另一个区别是,如果给赋予nil值setValue:forKey:
,则它将从字典中删除键(如果存在),否则不执行任何操作。但是,如果将的值设为nil setObject:forKey:
,则会引发异常。
dic[key] = value;
如果value为,则可以编写以支持删除键nil
。通常,下标比setValue:forKey:
完成此方法更好。
-setValue:forKey:
只是发送-setObject:forKey:
给接收者,除非该值为nil
,在这种情况下为send -removeObjectForKey
。
死了很简单。
anObject —键的值。对象在添加到之前会收到保留消息NSDictionary
。该值不能为nil。
aKey —价值的关键。密钥已复制(使用copyWithZone:
;密钥必须符合NSCopying
协议)。密钥不能为nil。
value —键的值。
key —价值的关键。请注意,在使用键值编码时,键必须是字符串(请参阅“键值编码基础知识”)。