在查看文档时,我几乎看不出有什么大的不同。 “值”和“对象”都是 id 类型,因此可以是任何对象。 Key 曾经是一个字符串,在另一种情况下是一个 id。其中一个似乎保留了该对象,而另一个则没有。还有什么?哪一个适用于什么情况?
最佳答案
setValue:forKey:
是 NSKeyValueCoding 的一部分协议(protocol),除其他外,它允许您从 Interface Builder 之类的工具访问对象属性。 setValue:forKey:
在 NSDictionary
以外的类中实现。
setObject:forKey:
是 NSMutableDictionary
存在的理由。它的签名恰好与 setValue:forKey: 非常相似,但更通用(例如任何键类型)。签名如此相似有点巧合。
更让人困惑的是,在大多数情况下,NSMutableDictionary 对 setValue:forKey:
的实现等同于 setObject:forKey:
。在其他类中,setValue:forKey:
更改成员变量。在 NSMutableDictionary
中,它会更改字典条目,除非您在键前加上“@”字符——在这种情况下,它会修改成员变量。
因此,简而言之,当您需要使用字典键和值时,请使用 setObject:forKey:
,而在极少数情况下,请使用 setValue:forKey:
您需要处理的案例 KVP .
编辑:哦,看起来这个问题之前已经被问过和回答过:Difference between objectForKey and valueForKey?
关于ios - setObject :forKey: and setValue:forKey: in NSMutableDictionary? 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1249634/