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.