2011-04-29 3 views
2

OK, regardant cela:Releasing Ivars en Objective-C

Apple docs: Declared Properties

Si vous faites défiler vers le bas pour dealloc il lit comme suit:

« En règle générale dans une méthode dealloc vous devez libérer les variables d'instance d'objet directement (plutôt que d'invoquer un accesseur set et passant nulle comme paramètre), comme illustré dans cet exemple: «

- (void)dealloc { 
    [property release]; 
    [super dealloc]; 
} 

» Si vous utilisez le mod exécution ERN et la synthèse de la variable d'instance, cependant, vous ne pouvez pas accéder à la variable d'instance directement, vous devez donc appeler la méthode accesseur: »

- (void)dealloc { 
    [self setProperty:nil]; 
    [super dealloc]; 
} 

Maintenant, je dois posséder au moins 15 à 20 livres sur le développement iOS. Je ne peux pas dire que je l'ai jamais vu un code dans ces livres proposant que l'on faire autre chose que:

[someproperty release]; 

Y at-il une raison impérieuse de modifier un tas de fichiers de code qui fonctionne parfaitement bien d'adopter Apple recommandation? Que diriez-vous de travail futur? Ou sont-ils à peu près équivalents?

Répondre

2

Le document d'Apple semble s'appliquer uniquement si vous avez activé la synthèse par défaut. Si vous l'avez désactivé, ce qui semble être le cas par défaut, vous avez besoin de @synthesize, qui vous donne directement accès aux variables.

Personnellement, je fais:

@synthesize someProperty=_someProperty; 

juste pour que je puisse alors faire:

- (void)dealloc { 
    [_someProperty release]; 
    [super dealloc]; 
} 

Voir Jeff LaMarche's blog pour plus.

1

Sur l'environnement d'exécution moderne, vous n'avez plus besoin de déclarer les variables d'instance pour les propriétés, ni d'écrire @synthesize dans l'implémentation. Si votre code a déjà déclaré les variables d'instance, il n'y a aucune raison de remplacer le code qui appelle la libération par un appel à un accesseur défini (le premier guillemet que vous avez collé indique même cela).

+0

J'avais l'impression que ne pas avoir besoin de @synthesize créait des problèmes, donc c'est maintenant nécessaire. –

+0

Si vous avez activé la synthèse par défaut, vous n'avez pas besoin de @synthesize et vous perdez l'accès direct. Parfaitement clair ... –