2010-11-19 4 views
0

J'ai une propriété:Quels attributs @property doivent être utilisés lorsqu'aucune référence à la valeur n'est stockée?

@property(readwrite, ?????) NSDate *selectedDate; 

Les accesseurs sont comme ceci:

NSCalendar _calendar; 
NSDateComponents _selectedDateComponents; 

@dynamic selectedDate; 
- (void)setSelectedDate:(NSDate *)newDate 
{ 
    @synchronized(_selectedDateComponents) 
    { 
     if (!newDate) return; 

     [_selectedDateComponents release]; 
     int requiredComponents = NSDayDateComponent | NSMonthDateComponent | NSYearDateComponents; 
     _selectedDateComponents = [[_calendar components: requiredComponents fromDate:newDate] retain]; 
    } 
} 

- (NSDate *)selectedDate 
{ 
    @synchronized(_selectedDateComponents) 
    { 
     if (!_selectedDateComponents) return nil; 

     return [_calendar dateFromComponents:_selectedDateComponents]; 
    } 
} 

La classe ne conserve pas de référence à l'objet qui est envoyé au poseur. Aucun des retain, copy ou assign ne semble approprié. J'aime avoir cette fonctionnalité encapsulée comme une propriété, mais peut-être qu'une propriété n'est pas appropriée.

Quelle est votre opinion?

Répondre

2

Si vous écrivez vos propres setters, peu importe ce que vous utilisez. Il sert seulement d'indication sur comment cela fonctionne pour vous-même/d'autres développeurs.

Le type de propriété affecte uniquement les méthodes créées par @synthesize. Donc, si vous fournissez vos propres méthodes, vous dictez vous-même la stratégie de conservation, et la déclaration de stratégie de propriété est la plupart du temps ignorée.

Dans ce cas, j'utiliserais la copie. Parce que, alors que vous n'utilisez pas une copie directe, vous stockez des valeurs provenant de l'objet transmis et les stockant de manière non gênante à cet objet. Donc, vous copiez l'information, juste dans un format différent. Mais pour autant que le compilateur se soucie, cela n'a pas vraiment d'importance. C'est purement pour montrer quand vous écrivez votre propre setter.

Questions connexes