Ils peuvent avoir le même nom, bien qu'ils ne le doivent pas. En effet, il n'est pas nécessaire que la propriété visible à l'extérieur corresponde exactement à une seule variable d'instance. Une telle correspondance est attendue si vous allez à @synthesize
les méthodes d'accesseur, mais il y a des raisons tout à fait légitimes pour créer les méthodes manuellement et les faire faire autre chose que de simplement obtenir/fixer un ivar correspondant.
Les variables d'instance n'étant normalement pas accessibles depuis le monde extérieur, tous les accès externes doivent être effectués via les méthodes de propriété. (Il est possible de déclarer des ivars @public
, mais c'est rarement une bonne idée.)
De l'intérieur de l'objet, que vous accédiez en tant que propriétés ou variables d'instance dépend de ce que sont réellement les propriétés et de ce que vous en faites .
Pour les propriétés simples synthétisés, il est courant d'utiliser les accesseurs (soit en utilisant explicitement [self setXxx]
ou en utilisant la notation de points comme self.xxx
) sauf dans dealloc
(et peut-être init
, en fonction de qui vous demandez).
Dans les cas plus complexes, vous devez vraiment penser à ce que vous essayez d'accomplir. Mais si vous avez pris la peine d'en faire des propriétés, vous voulez probablement que la fonctionnalité encapsulée dans les méthodes d'accès soit appelée la plupart du temps.
En tout cas, lisez le properties documentation pour avoir une meilleure compréhension de ce qui se passe.
+1 Pour plus de clarté et de bel exemple. Peut-être le ivar «propre» embrouille-t-il l'eau? – walkytalky
@walkytalky: Oui, j'ai remarqué que je ne l'avais même pas utilisé (j'avais autre chose en tête), alors je l'ai supprimé. –