Depuis Objective-C 2.0, il existe une nouvelle fonction du langage, qui permet de simplifier grandement l’écriture des accesseurs et mutateurs.
Il suffit d’utiliser la commande @property dans la déclaration (fichier xxx.h) et d’utiliser la commande @synthesize dans l’implémentation (fichier xxx.m), pour imposer au compilateur l’écriture des « setter » et « getter » pour les differents membres de l’application.
Par exemple :
fichier MaClasse.h
#import @interface MaClasse: NSObject{ IBOutlet UITextLabel *monLabel; NSString *unePhrase; } @property IBOutlet UITextLabel *monLabel; @property NSString *unePhrase; @end
ensuite dans l’implémentation du fichier MaClasse.m :
#import "MaClasse.h" @implementation MaClasse @synthesize monLabel, unePhrase;
Ce qui simplifie grandement le code à écrire pour gérer ses propriétés d’instances
A utiliser imperativement !!
2 – Utiliser des attributs
Il est possible (et recommandé…) d’utiliser des attributs pour gérer les propertys :
On peut définir le nom des accesseurs/mutateurs,
Les propriétés de lecture,
Le type de comptage des références,
l’atomicité des références ( c’est à dire que les propriétés sont « verrouillées » ou pas dans le cas d’utilisation multithreads : nonatomic = les valeurs sont simplement renvoyées par les accesseurs/mutateurs, atomic = les valeur sont verrouillées et doivent êtres déverouillées pour l’usage).
Exemple :
#import @interface MaClasse: NSObject{ IBOutlet UITextLabel *monLabel; NSString *unePhrase; } @property(nonatomic, retain) IBOutlet UITextLabel *monLabel; @property(readOnly) NSString *unePhrase; @end
Ici dans le cas de monLabel, il est demandé une utilisation nonAtomic, et la mémoire est fixée à retain pour une libération manuelle.
Pour unePhrase, le paramètre est fixé à readOnly, ce qui indique au compilateur de ne créer que le « getter » du paramètre et pas de « setter« .