====== 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;