2009-05-17 8 views
1
XIB

Alors, voici ma configuration:Déchargement de la mémoire

  • tourne utilisateur PickerWheel, choisit quelle section de l'application pour naviguer.
  • L'application charge un UIViewController à partir d'un fichier XIB et le pousse à la NavigationController pile
  • L'utilisateur peut pop revenir à tout moment et choisir une autre section pour naviguer vers - la viewController est (censé être) complètement détruits et réémergentes alloué pour le nouveau fichier XIB

Cela semble simple, mais chacune de ces sections est très gourmande en ressources. Je ne peux pas trouver un bon moyen d'effacer complètement le XIB de la mémoire quand ils reviennent - j'essaie simplement d'appeler [version de viewController], et pendant qu'il fonctionne et finit par appeler la méthode - (void) dealloc de la sous-classe UIViewController, certains contenus du fichier XIB restent en mémoire (je peux les voir dans ObjectAllocations, et je peux voir beaucoup de mémoire dans ActivityMonitor).

Fondamentalement ce que je demande est quelle est la meilleure façon de supprimer complètement un XIB dynamiquement-chargé de la mémoire?

Répondre

6
viewController.view = nil; 

Si view est nul sur un UIViewController contrôlé NIB, il rechargera automatiquement le NIB la prochaine fois qu'il est demandé. C'est exactement comment fonctionne -didReceiveMemoryWarning. Comme je pense à cela plus, cela ne sera pas immédiatement laisser tomber vos IBOutlets, ce qui dans votre cas est probablement important. Vous devez donc également implémenter la gestion de mémoire spéciale pour IBOutlets décrite dans Memory Management of Nib Objects.

Vous devez implémenter -setView: comme décrit. Lisez attentivement ce document en entier. J'ai rédigé un résumé rapide des points clés dans Memory Managing IBOutlets.

+0

Wow. Trois mots annule trois heures de travail: P Vous, monsieur, êtes un champion. Très appréciée. –

+0

Ceci est peut-être l'un des messages les plus importants sur StackOverFlow - iPhone. Rob Napier est mon MVP. Si vous faites quelque chose qui nécessite des navigateurs et des UIViewControllers complexes, s'il vous plaît, s'il vous plaît, faites attention à ce post! Merci Rob! – Jordan

+0

Qu'est-ce ???? Pourquoi cela n'est-il pas écrit en caractères gras rouges en haut de la documentation du SDK? Ce post m'aide tellement. Sachez que je comprends pourquoi mon application ne libère pas toute sa mémoire – CodeFlakes