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

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


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


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



假设我有三层意见:

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


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

在这里,我只希望有三个UIViewController,在程序运行时每个实例都有一个。因此,我可以将相同的MovieInfoController重用于不同的电影,并且类似地使用MovieCreditsController

但是,我还希望MovieInfoController仅在将其压入堆栈时才更新其视图字段(例如标题,发行日期等)。在viewWillAppear中实现显示将强制其更新字段,即使在弹出MovieCreditsController时也是如此。

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

有合理吗?我会以错误的方式处理吗?

最佳答案

您在那里90%是因为创建了Movie对象。 MovieListController应该拥有单个MovieInfoController。在将其放入导航控制器之前,应先调用-setMovie:。对-setMovie:的调用应该可以更新您的字段。

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

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

09-29 21:06