ios - setObject :forKey: and setValue:forKey: in NSMutableDictionary? 有什么区别

标签 ios iphone nsmutabledictionary

在查看文档时,我几乎看不出有什么大的不同。 “值”和“对象”都是 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/

相关文章:

iphone - 应用更新时 Core Data 中保存的数据会发生什么变化

iPhone OpenGL ES glFlush() 不一致地慢

iphone - 如何以编程方式使 iPhone 静音

objective-c - 将 NSMutableArray 或 NSMutableDictionary 传递给一个方法——你可以添加它吗?

ios - 初始化 NSMutableDictionary

ios - 如何在新的 iTunes Connect 中更改包 ID

ios - ShowsMyLocationButton 未在 iOS 上显示(react-native-maps)

ios - 设置属性文本,NSRangeException 错误

iphone - 迁移到 iphone5 不起作用?

objective-c - 将 UIIImage 对象设置为 NSMutableDictionary 对我不起作用