J'ai vu quelques articles sur ce sujet ici sur SO, mais pas de réponses définitives. Voici mon problème.UINavigationController: Libérer la mémoire de ViewController quand elle est apparue
J'ai un UINavigationController
que j'utilise comme galerie. Sur le premier contrôleur, je charge un tas d'images distantes. Cela augmente ma taille de la mémoire, mais pas autant. En cliquant sur une image, il va pousser sur un autre viewController
qui a des images pour la galerie juste cliqué. Cela peut charger dans un autre 1 Mo ou plus de données à partir de ces images.
Le problème ici est qu'un utilisateur peut parcourir n'importe quel nombre de ces galeries. Depuis que j'ouvre le viewController, cette mémoire n'est pas libérée, je commence à utiliser trop de mémoire dans mon application lorsque les utilisateurs continuent à parcourir les galeries.
Y at-il un moyen que je peux libérer cette mémoire lorsque j'appelle viewController
? Peut-être dans ma méthode viewDidDisappear:
? Si oui, que libérerais-je? Et comment puis-je le créer à nouveau? J'ai essayé cela jusqu'à un certain point, comme libérer mon point de vue, mais j'ai des plantages.
Avez-vous un aperçu de ce problème?
PhotosGalleryiPad *gallery = [[PhotosGalleryiPad alloc] init];
gallery.items = self.items;
gallery.asset = self.currentAsset;
[self.navigationController pushViewController:gallery animated:YES];
[gallery release];
Honnêtement ... il semble que la mémoire doit vraiment être décharger dans "dealloc" de la vue que vous avez chargé lorsque vous l'avez retiré de la pile. Etes-vous sûr que vous publiez toutes les données de la photo dans dealloc correctement? À moins que vous n'autorisiez l'utilisateur à naviguer dans un tas de vues à l'infini sans jamais cliquer sur le bouton «Précédent» ... les vues dans le navigateur de vue devraient se décharger sur un clic du bouton précédent dans l'en-tête en général. Si tel est le cas, vous voudrez peut-être regarder un paradigme de navigation différent. – Delete
Non, dealloc est appelé et mes propriétés sont publiées. Ils cliquent simplement, poussent le contrôleur, puis cliquent sur le bouton "retour" normal pour revenir à la racine. –