2 votes

Extraction de valeur à partir de NSDictionary avec des crochets vs. objectForKey: ou valueForKey:

Je me demandais ce que signifiait cette méthode de commodité mais je n'ai pas pu trouver de réponses à ce sujet.

Que fait exactement theDictionary[@"key"] lorsque l'on veut extraire une valeur d'un dictionnaire ? Utilise-t-il valueForKey: ou objectForKey: ?

Qu'en est-il des performances ? Est-il préférable d'écrire tout le message comme [theDictionary objectForKey:@"key"] ou la méthode de commodité est-elle suffisante ?

2voto

Amin Negm-Awad Points 3340

Mettons cela dans un contexte :

Il existe différentes façons d'accéder à un objet qui est accessible par une clé.

A. Key-Value Coding

Le key-value coding se fait avec -valueForKey: et autres. Puisque cela est implémenté dans NSObject, presque tous les objets ayant des propriétés (qui ont des propriétés accessibles par clé) répondent à cela. Fondamentalement, ces méthodes forment un sélecteur à partir de la clé et l'envoient à l'objet. En plus de cela, vous avez la possibilité de créer un chemin de clés et il existe quelques clés spéciales, comme count.

Ceci est complètement implémenté en dehors du compilateur.

Les instances de NSDictionary le supportent.

B. Subscripting

[] est la syntaxe pour le subscripting. Si la clé entre [ et ] est un objet, c'est du subscripting clé. Le compilateur transforme cette syntaxe en un message -objectForKeyedSubscript: et autres. Le receveur doit implémenter les méthodes.

Les instances de NSDictionary le supportent en envoyant simplement -objectForKey: et autres à self. Mais il y a une petite différence, voir ci-dessous.

C. NSDictionary

De plus, NSDictionary implémente -objectForKey:.

Il n'y a pas de bonne ou mauvaise réponse. Personnellement, je préférerais le message le plus spécifique pour les instances de NSDictionary, -objectForKey: et autres. Cependant, le subscripting clé pourrait être plus lisible.

Le key-value coding est bon si vous ne connaissez pas le type du receveur.

Par ailleurs, le key-value coding et le subscripting clé vous permettent de définir des valeurs nulles dans une instance de NSMutableDictionary, tandis que -setObject:forKey: et autres l'interdisent.

1voto

Eiko Points 19502

NSDictionary fournit la méthode objectForKey: pour accéder à son contenu. La différence avec valueForKey: est expliquée en détail dans cette question connexe : Différence entre objectForKey et valueForKey?.

L'opérateur [] est un raccourci pour objectForKey:. Peu importe celui que vous utilisez, mais le premier est plus facile à lire (moins de bruit de code), clair instantanément dans son intention, et vous n'avez pas à vous demander s'il s'agit de objectForKey: ou valueForKey:.

Donc personnellement, je préfère beaucoup [].

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