如何设置视图控制器以刷新视图中的字段,仅当将其从导航控制器视图中弹出时才将其推入并释放对象。
我的目标是对于视图控制器:
仅在将其推入导航控制器堆栈中时刷新显示
从导航控制器堆栈中弹出数据时释放数据
尽可能重用控制器(以消除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:
释放内存。