Cocoa @property

elfoiros

Membre enregistré
12 Avril 2011
4
0
Bonjour,

je m'embrouille les pinceaux avec la notion de property. Le code ci-dessous est-il correct sachant que j'utilise copy dans le .h et retain dans le .m ?

La ligne @property est-elle utile dans le .h ?

Merci

Bloc de code:
// Fichier color.h
#import <Cocoa/Cocoa.h>

@interface OMNComboBoxCell : NSTextFieldCell {
  NSColor *bgColor;
}
@property (readwrite, copy) NSColor *bgColor;

@end
//

// Fichier color.m
- (void)setBgColor:(NSColor *)l_bgColor
{
    NSLog(@"[DEBUG] [%@ %@]", NSStringFromClass([self class]), NSStringFromSelector(_cmd));

    [l_bgColor retain];
    [bgColor release];
    bgColor = l_bgColor;
}

- (NSColor *)bgColor
{
    NSLog(@"[DEBUG] [%@ %@]", NSStringFromClass([self class]), NSStringFromSelector(_cmd));

    return bgColor;
}
 
Les propriétés déclarées permettent:
1) de formaliser les déclarations
2) associées à @synthesize, de synthétiser automatiquement les accesseurs

Si tu écris toi-même les deux accesseurs (setter et getter), alors déclarer la propriété n'a pas d'effet fonctionnel&#8230; Mais, cela indique clairement dans l'interface de la classe la façon dont la mémoire est gérée.
Donc, déclarer la propriété est une bonne chose. Sache qu'on peut tout à fait utiliser @synthesize et proposer sa propre implémentation du setter ou (exclusif) du getter.

Par rapport à ton exemple, copy indique que l'objet va recevoir un appel à -[copy] dans le setter, alors que toi tu pratiques un [retain]. La déclaration de la propriété est donc mauvaise. Déclare-là en retain.

Ceci dit, le programme va très bien fonctionner en l'état, parce que l'implémentation de -[copy] sur les objets non modifiables tels que NSString, NSArray et donc NSColor, ne copie pas l'objet mais le retient. En effet, il ne sert à rien de copier un objet non modifiable: ça prend de la mémoire et du temps.