强制加载/卸载视图

时间:2009-08-05 20:42:32

标签: iphone cocoa cocoa-touch uikit uinavigationcontroller

如何设置视图控制器以刷新视图中的字段,只有在导航控制器上按下该视图并从导航控制器视图中弹出对象时才会释放它们。

我的目标是视图控制器:

  1. 仅在导航控制器堆栈上按下时才刷新显示
  2. 从导航控制器堆栈中弹出数据时发布数据
  3. 尽可能多地重用控制器(以消除xib文件加载/卸载开销)
  4. viewWillBePushed:viewWillBePopped:是否有任何委托方法?

    实施例

    假设我有三层观点:

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

    假设我们有一个班级Movie来代表每部电影。

    在这里,我想只有三个UIViewController,每个在程序的运行时中有一个实例。因此,我可以为不同的电影重复使用相同的MovieInfoController,同样MovieCreditsController

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

    另外,我希望MovieInfoController在弹出它时释放对Movie的引用,以及任何可能很大的对象(例如封面图像)。在viewWillDisappear中实现此逻辑将导致它在堆栈上推送MovieCreditsController时释放数据。

    有合理的吗?我是以错误的方式去做的吗?

1 个答案:

答案 0 :(得分:1)

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

同样,MovieInfoController应该拥有一个MovieCreditsController,并且应该在它上面调用[subController setMovie:nil],然后将其推送到导航控制器。

在MovieListController和MovieInfoController中,您可以在-viewDidAppear:中调用{{1}}来释放内存。