2012-01-27 57 views
6

我有一个奇怪的情况。我有一个相当强烈的记忆过程(图像处理)运行,但我已经制定了所有的结果,并且它在99%的时间内运行得很好。iOS应用程序在从后台返回后从内存警告崩溃,但不是之前?

但是,如果我将应用程序置于非活动状态或后台状态,则在返回并尝试运行相同的过程时,会出现内存警告,然后应用程序崩溃。

我已经使用仪器来分析两种使用情况下的内存占用情况,内存占用情况完全相同。但是,如果我没有将应用程序置于后台(或不活动),它不会给我任何内存错误并且完成正常工作。在将其置于后台(或不活动)的用例中,我收到内存错误并崩溃。

有没有人有关于此的任何信息?我一直在努力研究net/irc/stack over/apple文档。苹果(iOS)在我从后台返回后是否允许我的应用程序允许运行的内存量减少?有什么办法可以防止这种情况发生?或者我忽略了其他更简单的解决方案?

(注意,没有内存泄漏)

+0

请将错误消息添加到您的Q. – mit3z 2012-01-27 07:56:03

+0

没有错误消息,因为它是导致崩溃的低内存错误。 – 2012-01-27 08:03:23

+0

当您进入或离开前台/退出/变为活动状态时,您是否在您的应用程序委托方法中执行任何操作? – jrturton 2012-01-27 08:14:46

回答

2

好吧搞清楚了 - iOS没有做任何愚蠢的事情,当然是开发者:)还有另一个组件(ViewController)给我的项目,它在从后台返回时做了一些事情,比如分配内存。但是,这种观点并不积极,因此分配它所需的内存证明是无用的。清理代码后,我没有遇到任何内存错误。

0

也许您的应用程序在后台接收内存警告,同时,你的这种反应是不同的:例如,在后台的所有视图控制器可以有自己的内容在接收到内存警告时卸载,但在前台,您的活动视图控制器不会被卸载。如果说视图控制器或其中一个对象被设置为应用程序中某些其他进程的委托,而这些进程不响应低内存警告,则可能最终将消息发送到释放实例。

如果你知道崩溃的细节,你真的应该包括,以及更多关于应用程序的结构,这是我最好的猜测。

+0

我在后台没有收到任何内存错误,并且在恢复应用程序时视图全部加载。但是当我在应用程序中点击“开始”以开始处理图像时,由于内存不足而崩溃,但是只能在从后台返回后才会崩溃。 – 2012-01-27 08:04:52

+0

(我正在用这个海绵工作)是的,问题不在于它的应用程序在后台崩溃,它回到前景很好,问题是当我们继续使用该应用程序崩溃,由于内存不足的情况。如果我们执行完全相同的行为,但无法首先快速切换应用程序,它会正常工作,而不是一个警告。 – Shizam 2012-01-27 08:08:13

+0

那么您的应用如何响应低内存警告?你摆脱了什么? – jrturton 2012-01-27 08:08:47

2

只是为了检查,当启动任何后台进程时,它应该在autorelease池中。后台进程与主线程并行运行。所以,在背景上执行任何任务时,我们应该查看内存。这是泄漏常见的常见错误。处理UIKit的操作也总是在主线程上运行。所以如果你通过背景处理任何数据&想要在UI上显示它,那么将在主线程上加载。

相关问题