2011-09-29 3 views
0

Je pense que je fais quelque chose de ridiculement mauvais avec mon projet. Je fais un projet qui est essentiellement un ensemble de contrôleurs de vue avec des vidéos sur certains d'entre eux, des images sur les autres. J'ai créé une maquette, mais je pense que je pousse trop le contrôleur de navigation à faire ce pour quoi il n'est pas supposé être utilisé.Trop de contrôleurs de navigation?

Voici ce que j'ai fait: J'ai créé quatre contrôleurs de vue et un contrôleur de navigation. Le troisième contrôleur de vue possède un MPMoviePlayer en tant que sous-vue. Je l'enlève de la vue sur n'importe quelle transition de son contrôleur super vue, cependant il est venu à moi que, si je vais avoir une centaine de ces contrôleurs de vue, étant sur le 100e signifie avoir 99 vues déchargées. N'est-ce pas un problème vraiment malade ou je panique sans raison? Parce que je ne sais pas vraiment comment le faire dans l'autre sens. Merci.

Répondre

1

Est-ce que vous déplacez des contrôleurs de vue à sens unique, c'est-à-dire que vous ne faites que pousser et ne les faites jamais sauter? C'est une mauvaise pratique, bien qu'avec une gestion correcte de la mémoire, vous puissiez obtenir un très grand nombre de VC dans la pile avant que votre application ne tombe en panne. Si vous faites un saut entre quatre VC d'une manière qui n'est pas une pile de va-et-vient (comme un contrôleur de navigation) ou qui utilise un contrôle global comme une barre d'onglets, il est probablement préférable de supprimer la précédente. vue depuis sa vue d'ensemble et en la remplaçant par la nouvelle vue. Par exemple, dans le délégué de votre application:

-(void)switchToView:(UIViewController*)newVC 
{ 
    if (self.currentVC!=nil) 
     [self.currentVC.view removeFromSuperview]; 
    self.currentVC = newVC; 
    [self.window addSubview:newVC.view]; 
} 
+0

bingo! J'étais sûr que je poussais le contrôleur de navigation dans le projet inapproprié. Je vous remercie. Donc je ferais mieux de contrôler les transitions avec mon AppDelegate? – GOat

+0

Il y a beaucoup d'endroits où vous pouvez * contrôler * les transitions, mais j'ai trouvé que le faire au niveau du délégué de l'application fonctionnait le mieux. N'importe qui peut accéder au délégué de l'application en appelant simplement le délégué [[UIApplication sharedApplication]]. En utilisant une propriété conservée, votre VC reste aussi longtemps que la vue est affichée. – AndrewS

0

Un UIViewController déchargera sa vue quand il le faut. Si vous aviez 100 niveaux de profondeur, vous n'auriez que quelques vues chargées. C'est pourquoi il est important d'implémenter viewDidUnload et de définir votre IBOutlet sur nil.

Questions connexes