问题全在标题中。我希望在我的应用程序中的一个视图被卸载时执行一些清理代码。有可能这样做吗?如果是这样,那是我应该拦截的事件?
答案 0 :(得分:1)
-viewDidUnload()或-viewWillDisappear()取决于您的设计。你可能想去viewDidUnload()。
答案 1 :(得分:1)
它还取决于您使用的sdk。如果您使用的是iphone-sdk 3.x,则会调用viewDidUnload
,否则将无法调用它。而2.x及以上则调用viewWillDisappear
。现在,如果您只想在卸载视图时调用方法,您可以从dealloc
调用它,但它不会非常值得信任。
答案 2 :(得分:1)
你想看看viewDidUnload或viewWillDisappear,为了清理你可能会使用viewDidUnload,你可能也想在dealloc方法中做清理。
来自Apple的文档:
viewDidUnload当调用时调用 控制器的视图已从中释放 存储器中。
- (void)viewDidUnload
讨论此方法称为a 与viewDidLoad方法相对应。 在低内存期间调用它 视图控制器的条件 需要释放它的观点和任何 与该视图关联的对象 释放记忆。因为看法 控制器经常存储引用 视图和其他与视图相关的对象, 你应该使用这种方法 放弃这些物品的所有权 这样他们的记忆就可以了 回收。你应该只为此而这样做 您可以轻松重新创建的对象 之后,在viewDidLoad中 方法或来自你的其他部分 应用。你不应该使用它 释放用户数据的方法或任何方法 其他不可能的信息 很容易重建。
通常,视图控制器存储 使用插座引用对象, 这是一个变量或属性 包括IBOutlet关键字和 使用Interface Builder配置。一个 视图控制器也可以存储 指向它创建的对象的指针 以编程方式,例如在 viewDidLoad方法。首选方式 放弃任何对象的所有权 (包括在商店中的那些)是使用 相应的访问器方法 将对象的值设置为nil。 但是,如果你没有 给定对象的访问器方法, 您可能必须释放该对象 明确。有关的更多信息 内存管理实践,请参阅 内存管理编程指南 为可可。
当调用此方法时, 查看属性为零。
特殊注意事项如果您的观点 controller存储对视图的引用 和其他自定义对象一样 负责放弃 安全地拥有这些物品 它的dealloc方法。如果你实施 这个方法,但正在建立你的 申请iPhone OS 2.x,你的 dealloc方法应该释放每个 对象但也应该设置 之前对该对象的引用为零 叫超级。
viewWillDisappear:通知视图 它的视图即将到来的控制器 被解雇,覆盖或以其他方式 隐藏在视野之外。
- (void)viewWillDisappear:(BOOL)animated
动画参数如果是,则 正在消失的观点 动画。
讨论调用此方法 对从中移除的视图的响应 它的窗口或另一个视图覆盖。 在视图之前调用此方法 实际上已被删除或覆盖 在配置任何动画之前。
子类可以覆盖此方法 并使用它来提交编辑更改, 辞去第一响应者的状态 视图,或执行其他相关 任务。例如,您可以使用它 恢复更改的方法 状态栏的方向或样式 这是在 viewDidDisappear:视图时的方法 首次出现。如果你覆盖 这个方法,你必须打电话给超级 你的实施中有一点。