簡體   English   中英

setObject:forKey:和setValue:forKey:在NSMutableDictionary中的區別在哪里?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM