À différents moments pendant le flux de travail de mon application, j'ai besoin de montrer une vue. Cette vue nécessite beaucoup de mémoire, je veux donc qu'elle soit désallouée lorsqu'elle est rejetée par l'utilisateur. Donc, j'ai écrit le code suivant:Gestion de la mémoire Cocoa
- (MyView *)myView {
if (myView != nil)
return myView;
myView = [[UIView alloc] initWithFrame:CGRectZero]; // allocate memory if necessary.
// further init here
return myView;
}
- (void)discardView {
[myView discard]; // the discard methods puts the view offscreen.
[myView release]; // free memory!
}
- (void)showView {
view = [self myView];
// more code that puts the view onscreen.
}
Malheureusement, cette méthode ne fonctionne que la première fois. Les demandes suivantes pour mettre la vue à l'écran entraînent des erreurs "message sent to deallocated instance"
. Apparemment, une instance désallouée n'est pas la même chose que rien. J'ai pensé à mettre une ligne supplémentaire après [myView release]
qui lit myView = nil
. Cependant, cela pourrait entraîner des erreurs (tout appel à myView
après cette ligne donnerait probablement des erreurs).
Alors, comment puis-je résoudre ce problème?
Si vous faites des appels à myView après l'avoir publié, vous * voulez * que les erreurs soient générées. – walkytalky