如何设置 View Controller 来刷新 View 中的字段(仅将其推送到导航 Controller 上)并在从导航 Controller View 中弹出时释放对象。
我的目标是 View Controller :
- 仅在推送到导航 Controller 堆栈时刷新显示
- 从导航 Controller 堆栈中弹出数据时释放数据
- 尽可能地重用 Controller (以消除 xib 文件加载/卸载开销)
是否有 viewWillBePushed:
和 viewWillBePopped:
的委托(delegate)方法?
示例
假设我有三层 View :
Movies (MovieListController)
--> Movie Basic Info (MovieInfoController)
--> Movie Credits (MovieCreditsController)
假设我们有一个类 Movie
来表示每部电影。
在这里,我只想拥有三个 UIViewController
,在程序运行时每个都有一个实例。因此,我可以为不同的电影重用相同的 MovieInfoController
以及类似的 MovieCreditsController
。
但是,我还希望 MovieInfoController
仅在将其插入堆栈时才更新其 View 字段(例如标题、发布日期等)。即使在弹出 MovieCreditsController
时,在 viewWillAppear
中实现显示也会强制其更新字段。
此外,我希望 MovieInfoController
在弹出时释放对 Movie
的引用,以及任何潜在的大对象(例如封面图像)。在 viewWillDisappear
中实现此逻辑将导致它在将 MovieCreditsController
压入堆栈时释放数据。
有合理性吗?我的处理方式是否错误?
最佳答案
你已经成功了 90%,因为你创建了一个 Movie 对象。 MovieListController 应该拥有一个 MovieInfoController。它应该在将其推送到导航 Controller 之前调用 -setMovie:
。对 -setMovie:
的调用应该更新您的字段。
类似地,MovieInfoController 应该拥有一个 MovieCreditsController,并且应该在将其推送到导航 Controller 之前调用 -setMovie:
。
在MovieListController和MovieInfoController中,您可以在其-viewDidAppear:
中调用[subController setMovie:nil]
来释放内存。
关于iphone - 强制加载/卸载 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1235624/