2011-09-29 182 views
0

我覺得我在做我的項目有些可笑的錯誤。我正在製作一個基本上是一套視圖控制器的項目,其中一些視頻控制器,其他視頻控制器上的視頻。我創建了一個模型,但我認爲我太推動導航控制器做它不應該用於的東西。導航控制器太多?

這是我做的:我創建了四個視圖控制器和一個導航控制器。第三個視圖控制器有一個MPMoviePlayer作爲子視圖。我從它的超級視圖控制器的任何轉換中將它從視圖中移除,但是在我看來,如果我將有一百個這樣的視圖控制器,那麼它們的第100個意味着卸載了99個視圖。這不是一個真正的病態問題,或者我沒有任何理由嚇壞了?因爲我不知道如何以另一種方式去做。 謝謝。

回答

1

你是否嚴格單向移動,即只推動視圖控制器並永不彈出它們?這是非常糟糕的做法,儘管通過適當的內存管理,在應用程序崩潰之前,您可以在堆棧中獲得大量的VC。

如果你以一種不是來回棧(如導航控制器)或使用全局控件(如導航欄)的方式在四個VC之間跳來跳去,那麼最好先移除以前的從其超級觀點看,並用新觀點代替它。例如,在您的應用代理中:

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

賓果!我確信我正在將導航控制器推入不適當的項目中。謝謝。所以我最好用我的AppDelegate控制轉換? – GOat

+0

有很多地方可以控制轉換,但我發現在應用程序代表的工作效果最好。任何人都可以通過調用'[[UIApplication sharedApplication]委託]'來獲得應用程序委託。通過使用保留屬性,只要視圖正在顯示,這也可以保持您的VC。 – AndrewS

0

UIViewController將在需要時卸載它的視圖。如果您的深度達到100級,則只會加載一些視圖。這就是爲什麼實施viewDidUnload並將IBOutlet設置爲nil非常重要。