Après avoir ajouté une vue par la méthode pushViewController
, il y aura un bouton de retour dans la barre de navigation pour faire sortir la vue de la pile. Cependant, il semble que iOS ne détruira pas la vue après l'avoir enlevée de la pile alors quand sera-t-elle détruite? Pouvons-nous le détruire manuellement en sortant la vue?Comment détruire une vue ajoutée par pushViewController?
Répondre
En général, le modèle est comme ceci:
- (void)pushSomeViewControllerOnStack
{
SomeViewController* someViewController = [[SomeViewController alloc] initWithNibName:@"SomeView" bundle:nil];
[self.navigationController pushViewController:someViewController animated:YES];
[someViewController release];
}
En d'autres termes, le contrôleur de navigation fera sa propre retain
du contrôleur de vue, ce qui signifie que vous aussi besoin de release
vous-même, car il y a un init
. Le contrôleur de navigation prendra également soin de libérer ce contrôleur lorsque cela est approprié.
Vous devez implémenter les méthodes viewDidUnload
et dealloc
dans vos sous-classes UIViewController
.
Lorsqu'un UINavigationController
fait sortir un contrôleur de vue de sa pile, le code dans ces méthodes sera exécuté.
Vous devriez lire la documentation View Controller Programming Guide for iOS: Navigation Controllers de iOS bibliothèque Developer d'Apple ainsi que la documentation de référence de classe pour les UINavigationController
et UIViewController
classes afin que vous permettra de mieux comprendre le cycle de vie du contrôleur de vue et ce qu'il faut attendre lors de divers événements d'application se produisent.
merci Shaggy Frog, mais mon problème est maintenant la vue seulement par le mécanisme de libération automatique du système, puis-je le libérer manuellement lors de l'ouverture de la vue? – Kelvin
Les contrôleurs de première vue sont ce qui sort de la pile, pas les vues. Deuxièmement, les contrôleurs de vue prennent soin de libérer leur vue associée; vous ne devriez pas vous soucier de libérer des vues comme vous le décrivez. –