2

如何设置视图控制器以刷新视图中的字段,仅将其推送到导航控制器上并在从导航控制器视图中弹出对象时释放对象。

我的目标是对于视图控制器:

  1. 仅在将显示推送到导航控制器堆栈时刷新显示
  2. 从导航控制器堆栈中弹出数据时释放数据
  3. 尽可能重用控制器(以消除 xib 文件加载/卸载开销)

viewWillBePushed:和是否有任何委托方法viewWillBePopped:

例子

假设我有三层视图:

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

假设我们有一个类Movie来表示每部电影。

在这里,我只想UIViewController在程序运行时拥有三个,每个实例一个。所以我可以MovieInfoController为不同的电影重复使用相同的内容,并且类似地MovieCreditsController

但是,我还想MovieInfoController仅在将其推送到堆栈时才更新其视图字段(例如标题、发布日期等)。实现显示viewWillAppear将强制它更新字段,即使在MovieCreditsController弹出时也是如此。

另外,我想MovieInfoController释放它的引用Movie,当它被弹出时,以及任何潜在的大对象(例如封面图像)。实现这个逻辑viewWillDisappear会导致它MovieCreditsController在压栈时释放数据。

有合理的吗?我是不是走错了路?

4

1 回答 1

1

你有 90% 在那里,因为你创建了一个 Movie 对象。MovieListController 应该拥有一个 MovieInfoController。它应该-setMovie:在将其推送到导航控制器之前调用。调用-setMovie:应该是更新您的字段的内容。

同样,MovieInfoController 应该拥有一个 MovieCreditsController,并且应该-setMovie:在将其推送到导航控制器之前调用它。

在 MovieListController 和 MovieInfoController 中,您可以调用[subController setMovie:nil]它们-viewDidAppear:来释放内存。

于 2009-08-05T22:37:05.707 回答