在 NSMutableDictionary 中 setObject: forKey: 和 setValue: forKey: 的区别在哪里?

在查看文档时,我几乎看不出有什么大的区别。“ value”和“ object”都是 id 类型的,因此可以是任何对象。键一次是一个字符串,另一次是一个 id。其中一个似乎保留了物品,而另一个没有。还有呢?哪个是什么案子的?

64956 次浏览

setValue:forKey:NSKeyValueCoding协议的一部分,它允许你从类似 Interface Builder 的地方访问对象属性。setValue:forKey:是在 NSDictionary以外的类中实现的。

setObject:forKey:NSMutableDictionary's存在的理由。它的签名碰巧与 setValue: forKey: 非常相似,但更为通用(例如,任何键类型)。签名如此相似,有点巧合。

令人困惑的是,在大多数情况下,NSMutableDictionary 对 setValue:forKey:的实现等效于 setObject:forKey:。在其他类中,setValue:forKey:更改成员变量。在 NSMutableDictionary中,它更改字典条目,除非在键前加上“@”字符——在这种情况下,它修改成员变量。

那么,简而言之,在需要处理字典键和值时使用 ABC0,在需要处理 < a href = “ http://developer.apple.com/library/mac/# document/Cocoa/Concept/KeyValueCoding/article/KeyValueCoding.html”rel = “ noReferrer”> KVP 的罕见情况下使用 setValue:forKey:

编辑: 哦,看起来这个问题以前已经被问过并回答过了: ObjectForKey 和 valueForKey 之间的区别? ?

另一个区别是,如果给 setValue:forKey:赋一个 nil 值,它会从字典中删除键(如果存在的话) ,否则什么也不做。但是如果你给 setObject:forKey:一个零值,它会引发一个异常。

一个对象 & mash; key 的值。该对象在添加到 NSDictionary之前接收到一个保留消息。此值不能为零。

值的键。复制密钥(使用 copyWithZone:; 密钥必须符合 NSCopying协议)。钥匙不能是空的。

Value & mash; key 的值。

Key & mdash; 值的键。注意,在使用键值编码时,键必须是一个字符串(参见“键值编码基础”)。

只发送 -setObject:forKey:到接收方,除非值是 nil,在这种情况下发送 -removeObjectForKey

非常简单。