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