[英]Where's the difference between setObject:forKey: and setValue:forKey: in NSMutableDictionary?
在查看文檔時,我幾乎看不出任何重大差異。 “value”和“object”都是id類型 ,因此可以是任何對象。 Key一次是字符串,另一種情況是id。 其中一個似乎保留了對象,而另一個則沒有。 還有什么? 哪一個適用於哪種情況?
setValue:forKey:
是NSKeyValueCoding協議的一部分,除其他外,它允許您從Interface Builder等訪問對象屬性。 setValue:forKey:
在NSDictionary
之外的類中實現。
setObject:forKey:
是NSMutableDictionary's
存在NSMutableDictionary's
原因。 它的簽名恰好與setValue:forKey:非常相似,但更通用(例如任何鍵類型)。 簽名非常相似,這有點巧合。
更令人困惑的是,在大多數情況下,NSMutableDictionary的setValue:forKey:
的實現等同於setObject:forKey:
. 在其他類中, setValue:forKey:
更改成員變量。 在NSMutableDictionary
,它會更改字典條目,除非您在鍵前加上“@”字符 - 在這種情況下,它會修改成員變量。
因此, 簡而言之,使用setObject:forKey:
當您需要使用字典鍵和值時,使用setValue:forKey:
在極少數情況下需要處理KVP 。
編輯:哦,看起來之前已經被問過並回答過: objectForKey和valueForKey之間的區別?
另一個區別是,如果你給setValue:forKey:
一個nil值,它會從字典中刪除密鑰(如果它存在),否則什么也不做。 但是如果你給setObject:forKey:
一個nil值,它會引發一個異常。
-setValue:forKey:
只是將-setObject:forKey:
發送給接收者,除非值為nil
,在這種情況下發送-removeObjectForKey
。
死簡單。
anObject - 鍵的值。 在添加到NSDictionary
之前,該對象會收到保留消息。 該值不得為零。
aKey - 價值的關鍵。 密鑰被復制(使用copyWithZone:
;密鑰必須符合NSCopying
協議)。 關鍵不能是零。
value - 鍵的值。
key - 價值的關鍵。 請注意,使用鍵值編碼時,鍵必須是字符串(請參閱“鍵值編碼基礎”)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.