Il y a beaucoup de cas dans lesquels une instance allouerait et la libère-la après avoir été attribuée à autre chose, qui le conserve en interne.
Par exemple, P>
UIView *view = [[[UIView alloc] initWithFrame...] autorelease]; [self addSubView:view];
3 Réponses :
Dans la plupart des cas, cela ne tient pas compte de toute façon. Étant donné que Le plus gros avantage de l'utilisation de -Autorelase code> signifie simplement que l'objet sera libéré à la fin de l'itération actuelle de la boucle d'exécution, l'objet sera libéré de chaque sens.
- Autoréleuillet code> est que vous n'avez pas à vous soucier de la durée de vie de l'objet dans le contexte de votre méthode. Donc, si vous décidez plus tard que vous voulez faire quelque chose avec un objet plusieurs lignes après sa dernière utilisation, vous n'avez pas à vous soucier de déplacer votre appel à
-Release code>. P> L'instance principale lorsque vous utilisez
-Release code> fera une différence notable vs. Utilisation de
-Autorelease code> est si vous créez
- (void)someMethod {
NSUInteger i = 0;
while (i < 100000) {
id tempObject = [[[SomeClass alloc] init] autorelease];
// Do something with tempObject
i++;
}
}
+1. AutoRelease obtient beaucoup de performances de Flak (Flak que j'ai rarement vue, sauvegardée avec des chiffres en code normal, sans grande boucle), mais AutoRelease sauve également beaucoup de fuites lorsque le code est refactored. J'utilise la libération plus souvent dans des routines de bas niveau car je ne sais pas s'ils peuvent être appelés dans une grande boucle à un niveau supérieur. Si vous allez utiliser la libération, vous devez vraiment définir la variable à NIL immédiatement après si la variable sera toujours en portée. Ne libérez jamais un objet mais j'ai toujours un pointeur.
Je vais habituellement pour -Release plutôt que -Autorelase dans la mesure du possible. Cela provient des années d'expérience du débogage et de l'amélioration du code de l'objectif-C des autres. Le code qui utilise AutoRelease WhereLe tout est difficile de déboguer lorsqu'un objet est surveillé, car la libération supplémentaire se produit loin du code incorrect. p>
C'est aussi le cas que beaucoup de gens utilisent l'autorelease quand ils ne comprennent tout simplement pas comment fonctionne la gestion de la mémoire de cacao. Apprenez les règles, apprenez l'API, et vous n'avez presque jamais besoin de faire face à un objet. p>
Un dernier point mineur est que si vous n'avez pas besoin du comportement de l'autorelease, vous utilisez AutoRelease tout simplement ajoute des travaux supplémentaires pour votre programme. p>