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 —价值的关键。请注意,在使用键值编码时,键必须是字符串(请参阅“键值编码基础知识”)。