====== Propriétés, attributs, constantes ====== ===== Propriétés ===== * readonly / readwrite -> la propriété est en lecture seule ou lecture/écriture (par défaut). En lecture seule, la synthétisation ne crée qu'un accesseur et pas de mutateur. * strong : lire "Je suis propriétaire de cet objet" -> applicable aux objets * weak : référence faible. Pointeur qui n'implique aucune notion de propriétaire. Exemple: __weak TYPE *variable; // Pour une variable d'instance @property (weak) TYPE *variable; // Pour une propriété * copy -> crée une copie de l'objet passé en paramètre * la copie est immuable, même si l'objet passé en paramètre est mutable (La copie d'un NSMutableString sera un NSString) * Si l'on souhaite créer une copie mutable, il est nécessaire d'implémenter manuellement le mutateur en utilisant par exemple la méthode mutableCopy. * Si l'objet passé en paramètre n'est pas mutable (la copie n'a alors aucun intérêt puisque le paramètre ne peut pas être modifié), la copie n'est pas réalisée -> copy appelle copyWithZone qui retourne lui-même. La plupart des classes n'implémentent pas copyWithZone ===== Constantes ===== ==== Version simplissime ==== * Le code enum VitessesVoiture { valeur1 = 1, valeur2 = 2, valeur3 = 5 }; * l'utilisation @interface Voiture : NSObject { enum VitessesVoiture speed; } - (void)setVitesse:(enum VitessesVoiture)x; @end ==== Avec un typedef ==== * Le code typedef enum { valeur1 = 1, valeur2 = 2, valeur3 = 5 } VitessesVoiture; * l'utilisation @interface Voiture : NSObject { VitessesVoiture speed; } - (void)setVitesse:(VitessesVoiture)x; @end On peut même omettre les valeurs, qui finalement ne servent pas à grand chose. Le compilateur s'en occupera lui-même. typedef enum { valeur1, valeur2, valeur3 } VitessesVoiture;