【发布时间】:2010-07-28 03:53:32
【问题描述】:
根据 Apple... 应用程序在“后台”(挂起模式)运行时应尽可能减少内存占用。我通过在 ApplicationDidEnterBackground 中释放一堆 2D 纹理并在 ApplicationWillEnterForeground 中重新加载相同的纹理来减少我的应用程序的内存占用。在大多数情况下,一切都有效。
这是我的问题:当我将应用程序快速移入/移出后台时,为什么会收到 SIGABRT 或 EXEC_BAD_ACCESS?当应用返回前台(正在重新加载纹理)时会发生错误。
当我将应用程序移入/移出后台的速度较慢时,我没有收到任何错误。我怎样才能防止这种情况?也许我应该在尝试重新加载资源之前检查资源是否真的被释放了?
在这种情况下,如何进行防御性编码?
【问题讨论】:
-
听说会进入前台可以调用之前确实进入后台就快速切换了。防御性代码。
-
我确定您已经知道,但是当您向已发布的对象发送消息时会出现该错误。这个例子很难具体说明。
-
@drawnonward:如果是这样,您可能会考虑先跟踪执行的内容。不一定是最佳编程实践,但应该可行。
-
一个可以提供帮助的防御性举措:在解除分配后将您的纹理设置为 nil,这样您就不会面临将消息发送到垃圾地址的危险。
-
尝试使用 NSZombiesEnabled 运行,它至少会告诉您正在向哪个对象发送消息,任何被释放的东西都应该设置为 nil,因为这样如果您向它发送消息,什么都不会发生,而不是您的程序爆炸了。
标签: iphone memory-management ios4