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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top