Dans votre interface, vous pouvez déclarer formellement une variable d'instance entre les accolades, ou en @property
dehors des accolades, ou les deux. Dans tous les cas, ils deviennent des attributs de la classe. La différence est que si vous déclarez @property
, vous pouvez implémenter using @synthesize
, qui code automatiquement votre getter / setter pour vous. Le setter de codeur automatique initialise les entiers et les flottants à zéro, par exemple. SI vous déclarez une variable d'instance et que vous ne spécifiez PAS de variable correspondante @property
, vous ne pouvez pas utiliser @synthesize
et devez écrire votre propre getter / setter.
Vous pouvez toujours remplacer le getter / setter auto-codé en spécifiant le vôtre. Ceci est généralement fait avec la managedObjectContext
propriété qui est chargée paresseusement. Ainsi, vous déclarez votre managedObjectContext
comme propriété, mais vous écrivez également une -(NSManagedObjectContext *)managedObjectContext
méthode. Rappelez-vous qu'une méthode qui porte le même nom qu'une variable / propriété d'instance est la méthode "getter".
La @property
méthode de déclaration vous permet également d'autres options, telles que retain
et readonly
, que la méthode de déclaration de variable d'instance ne fait pas. Fondamentalement, ivar
c'est l'ancienne méthode, et l' @property
étend et la rend plus élégante / plus facile. Vous pouvez vous référer à l'un ou l'autre en utilisant le soi. préfixe, ou pas, cela n'a pas d'importance tant que le nom est unique à cette classe. Sinon, si votre superclasse a le même nom de propriété que vous, alors vous devez dire soit comme self.name ou super.name afin de spécifier de quel nom vous parlez.
Ainsi, vous verrez de moins en moins de personnes déclarer ivar
s entre les accolades, et plutôt passer à la simple spécification @property
, puis à l'action @synthesize
. Vous ne pouvez pas faire @synthesize
dans votre implémentation sans un correspondant @property
. Le synthétiseur sait de quel type d'attribut il s'agit uniquement de la @property
spécification. L'instruction synthesize vous permet également de renommer les propriétés, de sorte que vous puissiez faire référence à une propriété par un nom (raccourci) à l'intérieur de votre code, mais à l'extérieur dans le fichier .h, utilisez le nom complet. Cependant, avec la saisie semi-automatique vraiment cool que XCode a maintenant, c'est moins un avantage, mais il est toujours là.
J'espère que cela aidera à dissiper toute la confusion et la désinformation qui circulent.