2009-08-05 118 views
2

如何設置視圖控制器來刷新視圖中的字段,只有當它從導航控制器視圖中彈出時纔會在導航控制器上按下並釋放對象。強制加載/卸載視圖

我的目標是,對於一個視圖控制器:

  1. 刷新顯示僅當導航控制器壓棧
  2. 釋放數據,當它被從導航控制器棧彈出
  3. 重用控制器儘可能地(以消除廈門國際銀行文件加載/卸載開銷)

是否有viewWillBePushed:和的任何委託方法?

比方說,我有意見三層:

Movies (MovieListController) 
    --> Movie Basic Info (MovieInfoController) 
     --> Movie Credits (MovieCreditsController) 

假設我們有一個類Movie來表示每部電影。

在這裏,我想只有三個UIViewController s,每個在程序運行時的一個實例。所以我可以對不同的電影重複使用相同的MovieInfoController,並且類似MovieCreditsController

但是,我也希望MovieInfoController只有當它被推入堆棧時才更新其視圖字段(例如標題,發佈日期等)。即使在彈出MovieCreditsController時,實現viewWillAppear中的顯示也會強制更新字段。

此外,我希望MovieInfoController在彈出窗口時釋放對Movie的引用,以及任何潛在的大對象(例如封面圖像)。在viewWillDisappear中實施此邏輯將導致它在將堆棧上的MovieCreditsController推送時釋放數據。

有沒有道理?我是否以錯誤的方式去做?

回答

1

因爲你創建了一個Movie對象,所以你90%。 MovieListController應該擁有一個MovieInfoController。在將其推入導航控制器之前,它應該調用-setMovie:。撥打-setMovie:應該是什麼更新你的領域。

類似地,MovieInfoController應該擁有一個MovieCreditsController,並且在將其推送到導航控制器上之前應該調用-setMovie:

在MovieListController和MovieInfoController中,您可以撥打[subController setMovie:nil]來解除內存釋放。

+0

這實際上是我現在正在做的,只是它調用'drainFieldsInfo'而不是'setMovie:nil'。我希望有更好的東西。雖然謝謝! – notnoop 2009-08-06 02:42:17