97 votes

Quelle est la différence entre setObject:forKey : et setValue:forKey : dans NSMutableDictionary ?

En regardant la documentation, je ne vois pas de grande différence. Les deux "value" et "object" sont de type id, et peuvent donc être n'importe quel objet. Key est une fois une chaîne, et dans l'autre cas un id. L'un d'eux semble conserver l'objet, et l'autre non. Quoi d'autre ? Lequel est pour quel cas ?

99voto

Oren Trutner Points 12125

setValue:forKey: fait partie de la Codage 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 que NSDictionary .

setObject:forKey: est NSMutableDictionary's raison d'exister. Sa signature est assez similaire à setValue:forKey :, mais elle est plus générique (par exemple, tout type de clé). C'est un peu une coïncidence que les signatures soient si similaires.

Ce qui ajoute à la confusion, c'est que la mise en œuvre de NSMutableDictionary de l'option setValue:forKey: est équivalent à setObject:forKey: dans la plupart des cas. Dans d'autres classes, setValue:forKey: modifie les variables membres. Dans NSMutableDictionary il modifie les entrées du dictionnaire, à moins que vous ne préfixiez la clé par le caractère '@' - dans ce cas, il modifie les variables membres.

Donc, en résumé, utilisez setObject:forKey: lorsque vous devez travailler avec des clés et des valeurs de dictionnaire, et setValue:forKey: dans les cas plus rares où vous devez aborder KVP .

EDIT : et oh, il semble que cette question a déjà été posée et répondue auparavant : Objective-C : Quelle est la différence entre objectForKey et valueForKey ?

32voto

user102008 Points 8748

Une autre différence est que si vous donnez une valeur nulle à setValue:forKey: il supprime la clé du dictionnaire si elle existe, sinon il ne fait rien. Mais si vous donnez une valeur nulle à setObject:forKey: il soulève une exception.

11voto

Jakub Truhlář Points 7104

-setValue:forKey: envoyez juste -setObject:forKey: au récepteur, sauf si la valeur est nil dans ce cas, envoyez -removeObjectForKey .

Très simple.

2voto

breakfreehg Points 245

anObject - La valeur de la clé. L'objet reçoit un message de retenue avant d'être ajouté à la base de données de l'UE. 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 à la NSCopying protocole). 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 de caractères (voir "Principes fondamentaux du codage clé-valeur").

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X