Patrząc na dokumentację, nie widzę dużej różnicy. Zarówno „wartość”, jak i „obiekt” są typu id , więc może to być dowolny obiekt. Klucz jest kiedyś łańcuchem, aw innym przypadku identyfikatorem. Jeden z nich wydaje się zatrzymywać obiekt, a drugi nie. Co jeszcze? Który jest do jakiego przypadku?
ios
iphone
nsmutabledictionary
EI Captain v2.0
źródło
źródło
Odpowiedzi:
setValue:forKey:
jest częścią protokołu NSKeyValueCoding , który między innymi umożliwia dostęp do właściwości obiektów, takich jak Interface Builder.setValue:forKey:
jest implementowany w klasach innych niżNSDictionary
.setObject:forKey:
jestNSMutableDictionary's
powodem do istnienia. Jego sygnatura jest podobna do setValue: forKey :, ale jest bardziej ogólna (np. Dowolny typ klucza). To trochę zbieg okoliczności, że podpisy są tak podobne.To, co dodaje do zamieszania, to fakt, że implementacja NSMutableDictionary
setValue:forKey:
jest równoważnasetObject:forKey:
w większości przypadków. W innych klasachsetValue:forKey:
zmienia zmienne składowe. WNSMutableDictionary
zmienia wpisy w słowniku, chyba że poprzedzisz klucz znakiem „@” - w takim przypadku modyfikuje zmienne składowe.Tak, w skrócie, użytkowania
setObject:forKey:
, gdy trzeba pracować z słownikowych kluczy i wartości, asetValue:forKey:
w przypadkach rzadkich, gdzie trzeba walki KVP .EDYCJA: i och, wygląda na to, że zadawano to wcześniej pytanie i odpowiadano: Różnica między objectForKey i valueForKey?
źródło
Inną różnicą jest to, że jeśli podasz wartość nil
setValue:forKey:
, to usuwa klucz ze słownika, jeśli istnieje, w przeciwnym razie nic nie robi. Ale jeśli podasz wartość zerosetObject:forKey:
, zgłosi to wyjątek.źródło
dic[key] = value;
aby obsługiwał usuwanie klucza, jeśli wartość jestnil
. Subskrypcja jest ogólnie lepszym podejściem niżsetValue:forKey:
osiągnięcie tego.-setValue:forKey:
po prostu wyślij-setObject:forKey:
do odbiorcy, chyba że wartością jestnil
, w takim przypadku wyślij-removeObjectForKey
.Śmiertelnie proste.
źródło
anObject - wartość klucza. Obiekt otrzymuje komunikat o zachowaniu, zanim zostanie dodany do
NSDictionary
. Ta wartość nie może być zerowa.aKey - klucz do wartości. Klucz jest kopiowany (za pomocą
copyWithZone:
; klucze muszą być zgodne zNSCopying
protokołem). Klucz nie może być zerowy.wartość - wartość klucza.
klucz - klucz wartości. Pamiętaj, że w przypadku kodowania klucz-wartość klucz musi być ciągiem (zobacz „Podstawy kodowania klucz-wartość”).
źródło