En regardant la documentation, je ne vois guère de différence. "valeur" et "objet" sont de type id, donc peut être n'importe quel objet. Key est une fois une chaîne et dans l'autre cas, un identifiant. L'un d'eux semble conserver l'objet, l'autre pas. Quoi d'autre? Lequel est pour quel cas?
setValue:forKey:
fait partie du protocole NSKeyValueCoding , qui permet entre autres d’accéder aux propriétés des objets à partir d’Interface Builder. setValue:forKey:
est implémenté dans des classes autres que NSDictionary
.
setObject:forKey:
est NSMutableDictionary's
raison d'exister. Sa signature se trouve être assez similaire à setValue: forKey:, mais est plus générique (par exemple, n'importe quel type de clé). C'est un peu une coïncidence que les signatures sont si similaires.
Ce qui ajoute à la confusion, c'est que l'implémentation de setValue:forKey:
est équivalent à setObject:forKey:
dans la plupart des cas. Dans les autres classes, setValue:forKey:
change les variables des membres. Dans NSMutableDictionary
, il modifie les entrées du dictionnaire, à moins que vous préfixiez la clé par un caractère '@' - auquel cas, il modifie les variables de membre.
Donc, en un mot, utilisez setObject:forKey:
lorsque vous devez utiliser des clés et des valeurs de dictionnaire et setValue:forKey:
dans les cas les plus rares où vous devez vous attaquer KVP .
EDIT: et oh, on dirait que cela a déjà été demandé et obtenu une réponse: Différence entre objectForKey et valueForKey?
Une autre différence est que si vous donnez une valeur nulle à setValue:forKey:
, il supprime la clé du dictionnaire s’il existe, sinon ne fait rien. Mais si vous donnez une valeur nulle à setObject:forKey:
, il soulève une exception.
-setValue:forKey:
envoyez simplement -setObject:forKey:
au destinataire, sauf si la valeur est nil
, auquel cas envoyer -removeObjectForKey
.
Mort simple.
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 (avec copyWithZone:
; les clés doivent être conformes au protocole NSCopying
). La clé ne doit pas être nulle.
valeur - La valeur de la clé.
clé - La clé de la 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").