2012-01-16 41 views
2

自從我開始iOS開發之後,這個問題一直在我腦海裏:UINavigationController和內存的使用。內存使用情況:什麼時候使用UINavigationController以及何時不使用?

我看到很多應用程序,例如iMail,Find Friends,Notes等,其中UINavigationController非常合理。它們允許您向下鑽取兩到三層的層次結構,就是這樣。

但想象一下從根文件夾開始瀏覽深層次結構,如Mac的文件系統。 如果我使用UINavigationController,我會繼續推動堆棧上的數百個控制器(最糟糕的情況)。我不認爲這是一個很好的用法。有些情況下推控制器可能會變得非常沉重(就內存而言),他們只是坐在那裏沒有任何東西。

我希望有一個「動態」版本的UINavigationController:它只會告訴你什麼時候導航備份層次結構而不是彈出層次結構。

我現在的問題是:UINavigationController的意圖是用於深層次?如果你想要所有的動畫,酒吧項目等,有什麼好的選擇? 或者我看到沒有任何問題?

回答

1

UINavigationController動態。當內存不足時,您可以釋放部分層次結構中不可見的內存 - 當您獲得較低的內存通知時,這是手動步驟 - 操作系統將自動在相同情況下釋放視圖。

當頂視圖控制器彈出堆棧時,您的viewDidLoad方法將被調用,允許您重新創建視圖。

如果確實存在問題,iOS5允許您創建自己的「容器」視圖,因此您可以創建自己的導航控制器,其功能與您的建議完全相同。查看UIViewController文檔的「實施容器視圖控制器」部分。

話雖如此,您可能需要添加一些快捷方式,以在深層次結構中工作。如果您一次只能返回一個屏幕,UI可能會變得很痛苦。

+0

但是一個UIViewController實例在控制器堆棧上懸掛着多重?即使我發佈了包括視圖在內的所有可能的數據,仍然還有一些東西。或者是不值得討論這些視圖字節? – Krumelur 2012-01-16 12:53:59

+0

這將是你的屬性/成員變量加上一些更多的「隱藏」變量開銷。它不是零,但它不是很大。 – 2012-01-16 13:11:03

+0

另請參閱我的關於創建自己的UINavigationController的編輯。 – 2012-01-16 13:12:46

相關問題