在查看文档时,我几乎看不出有什么大的不同。 “值”和“对象”都是id类型,因此可以是任何对象。键是一个字符串,在其他情况下是一个id。其中一个似乎保留了该对象,而另一个则没有。还有什么?哪一种适合什么情况?

最佳答案

setValue:forKey:NSKeyValueCoding协议(protocol)的一部分,除其他事项外,该协议(protocol)还使您可以从Interface Builder之类的对象访问对象属性。 setValue:forKey:NSDictionary之外的其他类中实现。
setObject:forKey:NSMutableDictionary's存在的原因。它的签名恰好与setValue:forKey:类似,但是更通用(例如,任何键类型)。签名如此相似有点偶然。

更令人困惑的是,在大多数情况下,NSMutableDictionary的setValue:forKey:实现与setObject:forKey:等效。在其他类中,setValue:forKey:更改成员变量。在NSMutableDictionary中,它会更改字典条目,除非您在键之前添加'@'字符-在这种情况下,它将修改成员变量。

因此,简而言之,,当您需要使用字典键和值时,请使用setObject:forKey:;在极少数情况下,需要处理KVP时,请使用setValue:forKey:

编辑:哦,看来这已经被询问过并回答过:Difference between objectForKey and valueForKey?

关于ios - setObject :forKey: and setValue:forKey: in NSMutableDictionary?和有什么不一样,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1249634/

10-12 07:22