Utiliser l'accès direct dans les états partiellement construits, indépendamment de l'ARC :
- (id)initWithReminder:(Reminder*)reminder_ {
self = [super init];
if (self) {
reminder = reminder_;
// OR
reminder = [reminder_ retain];
}
return self;
}
Cela s'explique par le fait que self.whatever
déclenchera d'autres effets secondaires, tels que des notifications de Key-Value Observing (KVO), ou peut-être que votre classe implémente (explicitement) ou qu'une sous-classe surcharge le paramètre setWhatever:
-- et cela pourrait exposer votre instance partiellement initialisée à d'autres API (y compris la sienne), qui supposent à juste titre qu'elles ont affaire à un objet entièrement construit.
Usted pourrait vérifier manuellement qu'une classe est capable de fonctionner dans un état partiellement initialisé, mais cela demande beaucoup de maintenance et est (franchement) peu pratique ou impossible lorsque d'autres personnes veulent sous-classer votre classe. Cela demande beaucoup de temps et de maintenance, et il n'y a pas d'avantage substantiel à le faire, surtout si vous essayez d'utiliser cette approche comme une convention.
Ainsi, la manière uniforme qui garantit la correction est d'utiliser l'accès direct dans les états partiellement construits, et d'éviter d'utiliser les accesseurs.
Note : J'utilise l'expression "partiellement construit" parce que l'initialisation n'est que la moitié de l'image ; -dealloc
a des réserves similaires.
Vous trouverez plus de détails sur la raison pour laquelle vous devriez utiliser l'accès direct dans les états partiellement construits (ARC || MRC) ici : Initialisation d'une propriété, notation par points