2011-11-01 112 views
1

我的應用程序涉及許多視圖控制器,其中一些視圖控制器是內存重載視圖控制器。什麼是呈現序列視圖控制器的最佳方式,用戶可以隨意跳來跳去

用戶流就像從家庭視圖控制器開始,用戶將點擊一系列視圖控制器(我使用presentModalViewControler進行轉換)。有時候,用戶會點擊一個菜單欄或某個東西回到他/她過去經歷過的某個視圖控制器,或者跳轉到尚未顯示​​的視圖控制器。所以,它就像: A-> B-> C-> D-> B-> D-> E-> F-> C->我...

我現在正在做的是:no當用戶需要跳轉到其他視圖控制器時,我只需實例化目標視圖控制器,並將其呈現爲模式視圖控制器。

好吧,它運行良好,但對於Instruments,我已經確定分配的內存堆在應用程序啓動後不斷增加。我的猜測是父視圖控制器(或iOSView中的呈現控制器)永遠不會被釋放,因爲它位於模式展示堆棧的根或中間,所以它就像繼續添加viewcontroller實例一樣。

因此,我意識到我做錯了。我很感激,如果有人能指出我正確的方向做這樣的應用程序。

回答

2

當您以模態方式呈現視圖控制器時,父視圖控制器會停留在附近。這就是爲什麼每當用戶導航到另一個視圖控制器時,您的內存使用量都會增加。

嘗試使用UINavigationController作爲窗口的根視圖控制器。使用您的A視圖控制器作爲導航控制器的根視圖控制器。然後,當你想要去你B視圖控制器,做這樣的(在當前視圖控制器的一些方法):

UIViewController *b = [[BViewController alloc] init...]; 
[self.navigationController setViewControllers:[NSArray arrayWithObject:b] animated:YES]; 

只要你不保留任何其他引用您的A或B視圖控制器,當它們不再可見時,它們應該被釋放。

+0

謝謝,我會嘗試這種方法。永遠不知道navigationController可以做到這一點。但是,我是否仍然通過呈現ModalViewController獲得淡入式過渡效果? –

相關問題