Quelle est la différence entre @property et @synthesize?
-
03-07-2019 - |
Question
Comme je le comprends bien, @synthesize génère en réalité les Getters et les Setters. Mais que fait @property alors? Est-ce juste la configuration des paramètres pour cette fonction magique @synthesize?
La solution
Vous écrivez @property dans le fichier d'en-tête
@property float value;
est équivalent à:
- (float)value;
- (void)setValue:(float)newValue;
Il obtient des informations pour les autres classes, que votre classe utilise cette méthode
@synthesize phisicaly CREER ces méthodes dans l'implémentation de classe
Autres conseils
@property
déclare le nom en tant que propriété. Cela signifie qu'il sera accessible via la syntaxe à points ( object.value
).
@synthetize
peut être vu comme une macro, qui crée les méthodes de lecture et de définition. Il est utile de savoir que vous pouvez remplacer ces méthodes, même si vous saisissez que le @synthetize
est en place.
@property
déclare le getter et / ou le setter
@synthesize
les implémente.
Il existe une idée fausse commune selon laquelle la directive @synthesize est obligatoire pour implémenter les paramètres de sélecteurs et de getters créés avec la directive @property, mais ce n'est pas le cas. L'utilisation de la directive @property sans @synthesize générera toujours des setters / getters et vous permettra d'utiliser la notation par points. Cependant, si vous omettez la directive @synthesize, le compilateur générera des variables d'instance correspondantes avec un caractère de soulignement, par exemple. la propriété myVar aura une variable d'instance de _myVar.
L’utilisation d’un trait de soulignement est une convention courante qui vous permet de distinguer les propriétés des variables d’instance. Il est également courant que les propriétés et les variables d’instance partagent le même nom, ce que @synthesize fait par défaut.