Wenn ich mir die Dokumentation ansehe, sehe ich kaum einen großen Unterschied. Sowohl "Wert" als auch "Objekt" sind vom Typ ID , können also jedes Objekt sein. Der Schlüssel ist einmal eine Zeichenfolge und im anderen Fall eine ID. Einer von ihnen scheint das Objekt zu behalten, der andere nicht. Was sonst? Welches ist für welchen Fall?
ios
iphone
nsmutabledictionary
EI Captain v2.0
quelle
quelle
Antworten:
setValue:forKey:
ist Teil des NSKeyValueCoding- Protokolls, mit dem Sie unter anderem auf Objekteigenschaften wie Interface Builder zugreifen können.setValue:forKey:
wird in anderen Klassen als implementiertNSDictionary
.setObject:forKey:
istNSMutableDictionary's
Grund zu existieren. Die Signatur ist setValue: forKey: ziemlich ähnlich, ist jedoch allgemeiner (z. B. ein beliebiger Schlüsseltyp). Es ist ein Zufall, dass die Signaturen so ähnlich sind.Was zur Verwirrung beiträgt, ist, dass die Implementierung von NSMutableDictionary in den meisten Fällen
setValue:forKey:
gleichwertigsetObject:forKey:
ist. In anderen Klassen werdensetValue:forKey:
Mitgliedsvariablen geändert. InNSMutableDictionary
werden Wörterbucheinträge geändert, es sei denn, Sie stellen dem Schlüssel ein '@' voran. In diesem Fall werden Mitgliedsvariablen geändert.Kurz gesagt, verwenden
setObject:forKey:
Sie diese Option, wenn Sie mit Wörterbuchschlüsseln und -werten arbeiten müssen, undsetValue:forKey:
in den selteneren Fällen, in denen Sie sich mit KVP befassen müssen .EDIT: und oh, es sieht so aus, als ob dies schon einmal gefragt und beantwortet wurde: Unterschied zwischen objectForKey und valueForKey?
quelle
Ein weiterer Unterschied besteht darin, dass, wenn Sie einen Nullwert
setValue:forKey:
angeben, der Schlüssel aus dem Wörterbuch entfernt wird, falls vorhanden, andernfalls nichts. Wenn Sie jedoch einen Nullwert angebensetObject:forKey:
, wird eine Ausnahme ausgelöst.quelle
dic[key] = value;
um das Entfernen des Schlüssels zu unterstützen, wenn der Wert gleich istnil
. Das Abonnieren ist im Allgemeinen ein besserer Ansatz, als diessetValue:forKey:
zu erreichen.-setValue:forKey:
Senden Sie einfach-setObject:forKey:
an den Empfänger, es sei denn, der Wert istnil
. In diesem Fall senden Sie-removeObjectForKey
.Ganz einfach.
quelle
anObject - Der Wert für key. Das Objekt erhält eine Aufbewahrungsnachricht, bevor es zum hinzugefügt wird
NSDictionary
. Dieser Wert darf nicht Null sein.aKey - Der Schlüssel zum Wert. Der Schlüssel wird kopiert (mit
copyWithZone:
; Schlüssel müssen demNSCopying
Protokoll entsprechen). Der Schlüssel darf nicht Null sein.value - Der Wert für key.
Schlüssel - Der Schlüssel für den Wert. Beachten Sie, dass bei Verwendung der Schlüsselwertcodierung der Schlüssel eine Zeichenfolge sein muss (siehe „Grundlagen der Schlüsselwertcodierung“).
quelle