2009-09-21 8 views
1

J'ai plusieurs boutons sur mon principal UIViewController (menu principal) qui crée et ajoute un sous-visualiseur UIViewController en haut du menu principal. Lorsque je supprime la sous-vue, la mémoire de ce contrôleur n'est pas libérée. Comment puis-je libérer instantanément cette mémoire de sous-vues?iPhone - sous-vue dealloc UIViewController lorsque removeFromSuperview

Est-ce que quelqu'un a un exemple? Cela résoudrait tous mes problèmes! Merci d'avance.

Voici comment ajouter un sous-vue

if((UIButton *) sender == gameClassicBtn) { 
     GameClassic *gameClassicController = [[GameClassic alloc] 
          initWithNibName:@"GameClassic" bundle:nil]; 
     self.gameClassic = gameClassicController; 
     [gameClassicController release]; 
     [self.view insertSubview:gameClassicController.view atIndex:1]; 
    } 

Répondre

0

Basé sur le code que vous avez fourni il pourrait y avoir au moins deux endroits, le UIViewController est retenu - un par la hiérarchie de vue (de self.view) et l'autre par une variable membre (self.gameClassic). Il semble que vous libérez uniquement la référence de hiérarchie de vue, mais pas la variable de membre. Si vous libérez ce dernier, libérez-vous le UIViewController?

+0

Je ne publie jamais rien à l'intérieur du code du menu principal ... Où se trouve le code ci-dessus. Je ne suis pas sûr de savoir comment dire à ce fichier que j'ai supprimé gameClassic.h de la vue. Je supprime cette sous-vue par [self.view removeFromSubview]; afin de revenir à mon menu principal. – bbullis21

+0

Fondamentalement, quel est mon problème que j'appelle pour insérer une sous-vue en cliquant sur un bouton dans le menu principal. Une fois le court jeu terminé, je fais un removeFromSubview, la mémoire de cette sous-vue n'est pas libérée immédiatement. Donc, s'ils choisissent un bouton différent dans le menu principal, ils chargent une autre sous-vue et l'objectalloc continue de construire. – bbullis21

+0

Je voudrais temporairement (mettre l'accent sur temporairement) remplacer la fonction de conservation et de publication dans votre classe GameClassic et mettre un point d'arrêt dans chaque classe. De cette façon, vous pouvez voir quand votre instance est conservée et libérée, ce qui vous permet de savoir où les numéros de ref supplémentaires doivent être supprimés. – fbrereto