En regardant la documentation, je ne vois guère de grande différence. Les deux "valeur" et "objet" sont de type id , donc peut être n'importe quel objet. La clé est une fois une chaîne et dans l'autre cas un identifiant. L'un d'eux semble conserver l'objet, et l'autre non. Quoi d'autre? Lequel est pour quel cas?
ios
iphone
nsmutabledictionary
Capitaine EI v2.0
la source
la source
Réponses:
setValue:forKey:
fait partie du protocole NSKeyValueCoding , qui, entre autres, vous permet d'accéder aux propriétés des objets à partir d'Interface Builder.setValue:forKey:
est implémenté dans des classes autres queNSDictionary
.setObject:forKey:
est uneNSMutableDictionary's
raison d'exister. Sa signature se trouve être assez similaire à setValue: forKey :, mais est plus générique (par exemple tout type de clé). C'est un peu une coïncidence si les signatures sont si similaires.Ce qui ajoute à la confusion, c'est que l'implémentation de NSMutableDictionary
setValue:forKey:
est équivalentesetObject:forKey:
dans la plupart des cas. Dans d'autres classes,setValue:forKey:
change les variables de membre. DansNSMutableDictionary
, il modifie les entrées du dictionnaire, sauf si vous préfixez la clé avec un caractère «@» - auquel cas il modifie les variables membres.Donc, en un mot, à utiliser
setObject:forKey:
lorsque vous avez besoin de travailler avec des clés et des valeurs de dictionnaire, etsetValue:forKey:
dans les cas plus rares où vous devez vous attaquer à KVP .EDIT: et oh, il semble que cela a déjà été demandé et répondu: Différence entre objectForKey et valueForKey?
la source
Une autre différence est que si vous donnez une valeur nulle à
setValue:forKey:
, il supprime la clé du dictionnaire si elle existe, sinon ne fait rien. Mais si vous donnez une valeur nulle àsetObject:forKey:
, cela lève une exception.la source
dic[key] = value;
pour prendre en charge la suppression de la clé si la valeur estnil
. La souscription est généralement une meilleure approche quesetValue:forKey:
pour y parvenir.-setValue:forKey:
envoyez simplement-setObject:forKey:
au destinataire, sauf si la valeur estnil
, auquel cas envoyer-removeObjectForKey
.Mort simple.
la source
anObject - La valeur de la clé. L'objet reçoit un message de conservation avant d'être ajouté au
NSDictionary
. Cette valeur ne doit pas être nulle.aKey - La clé de la valeur. La clé est copiée (en utilisant
copyWithZone:
; les clés doivent être conformes auNSCopying
protocole). La clé ne doit pas être nulle.value - La valeur de la clé.
key - La clé de valeur. Notez que lorsque vous utilisez le codage clé-valeur, la clé doit être une chaîne (voir «Principes de base du codage clé-valeur»).
la source