【问题标题】:Deallocation when iPhone is turned back on from sleep and app is still open当 iPhone 从睡眠状态重新打开且应用程序仍处于打开状态时释放
【发布时间】:2011-04-15 12:16:56
【问题描述】:

在某些情况下,当我的应用从睡眠状态重新打开时,应用程序仍处于打开状态时会崩溃。如果在 iPhone 进入睡眠状态时打开 UITableViews,就会发生这种情况;该表正在从正在解析的 XML 中填充。我明白它为什么会崩溃;在我的 viewDidUnload 方法中,我正在释放填充表格的数组。如何处理这个我不确定;是的,我根本无法在 viewDidUnload 中释放它,但是如果您返回主菜单,它将永远不会留下内存。

任何帮助将不胜感激!

【问题讨论】:

  • 你能发布你的代码吗?如果您的问题是您正在释放数组,并且即使您离开视图,它仍然被填充,那么您需要有一种方法来停止您的 XML 解析机制。释放数组本身应该不是问题...

标签: iphone ios uitableview crash release-management


【解决方案1】:

viewDidUnload 方法根本不是释放数据的正确位置。我引用了 Apple 的文档,它比我能更好地描述它:

这个方法被调用为对应的 到 viewDidLoad 方法。它是 在内存不足的情况下调用 当视图控制器需要 释放它的视图和任何对象 与该视图关联以释放 记忆。因为视图控制器经常 存储对视图和其他的引用 视图相关的对象,你应该使用 这种放弃所有权的方法 那些对象,使内存 它们可以被回收。你应该做 这仅适用于您可以使用的对象 以后可以轻松地重新创建,无论是在您的 viewDidLoad 方法或来自其他部分 您的应用程序。 你不应该 使用此方法释放用户数据 或任何其他信息不能 很容易重新创建。

ViewDidUnload 仅用于释放视图相关对象。视图控制器可以释放它的视图,因为它没有显示,你的控制器实例仍然存在,你的模型也存在。

【讨论】:

  • 谢谢我没有完全理解 viewDidUnload 方法;从此处删除阵列确实可以解决问题。我仍然在 dealloc 中释放数组。所以我仍然应该在 viewDidUnload 中释放我的按钮/标签等正确吗?
  • 是的,您对视图元素的任何额外参考。超级视图保留了子视图,当然还有你保留的属性,所以释放它们很重要。
猜你喜欢
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 2020-08-13
  • 2015-03-07
  • 1970-01-01
  • 2013-08-05
相关资源
最近更新 更多