iphone - 强制加载/卸载 View

标签 iphone cocoa cocoa-touch uikit uinavigationcontroller

如何设置 View Controller 来刷新 View 中的字段(仅将其推送到导航 Controller 上)并在从导航 Controller View 中弹出时释放对象。

我的目标是 View Controller :

  1. 仅在推送到导航 Controller 堆栈时刷新显示
  2. 从导航 Controller 堆栈中弹出数据时释放数据
  3. 尽可能地重用 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/

相关文章:

iphone - 如何向 MPMoviePlayer 添加另一个视频?

iphone - 评估 iPhone 开发商店时,最好问的问题是什么?

iphone - NSMutableURLRequest 检查 Https SSL 证书验证

objective-c - 如何在 Xcode (Cocoa) 中检索文件的图标

cocoa - 定义 NSNotification 使用的名称字符串,无需耦合

cocoa-touch - 发布通知时出现 NSInvalidArgumentException

iphone - 分发规定未找到私钥

iphone - 为什么我在更改默认 .xib 时出错?

iphone - 我真的需要 MainWindow.xib 文件吗?

objective-c - iOS - 加载表时显示 UIActivityIndi​​catorView