2012-07-27 60 views
0

我很惊讶iOS 5.1不能像我期望的那样管理内存。当设备运行很多应用程序时,iOS似乎不会在后台杀死内存占用应用程序,但也会向我自己的应用程序发送内存警告。iPhone iOS什么是处理内存警告的最可接受的方式?

例如,显示UIImagePicker在两个测试设备上崩溃了应用程序。双击主页键并杀死一些后台应用程序可以防止应用程序接收到内存警告和崩溃。

如果iOS不会为我腾出内存,是否可以通过显示某种警告视图来通知用户内存不足以及某些后台任务必须被终止?

我不知道如何处理这些事件 - iOS需要时间清理一些内存(而应用程序响应内存警告)?

+1

我怀疑苹果是否会批准一个应用程序,要求用户为了继续工作而杀掉其他应用程序。 – Thilo 2012-07-27 01:24:42

回答

5

iOS在处理内存警告(包括杀死背景应用程序)之前会执行很多操作。从iOS 5开始,iOS甚至会尽可能减少内存警告,这意味着如果真的需要你摆脱使用内存但现在不需要的东西,您可以安全地重新创建,而不需要花费数小时)。如果你的应用程序崩溃而没有先给你一个内存警告,那么你有可能分配了太多的内存,以至于在系统决定杀死你之前,系统不能告诉你内存用完了,原因是内存警告计划在主线程的runloop中,直到您给runloop时间做另一次迭代,您将不会收到警告。

此外,Apple不喜欢你告诉用户存在内存问题;它的应用程序必须处理它,而不是用户!因此,如果在审核团队审核您的应用时出现内存警告(传言称他们发送这些警告来测试您的应用对它们的反应),那么您的应用也会遭到拒绝。

Soo,总结它up:iOS确实可以像你期望的那样工作,通过杀死它可以甚至关闭其他系统守护进程,只有在发生这种情况之后,你才会收到内存不足的通知。响应这些警告的正确方法是释放尽可能多的内存,从未来可以轻松重新创建的大型内容开始(例如,如果您的应用程序显示大量图片,但并非所有内容都可见,扔掉那些现在不可见的东西)。告诉用户是处理这个问题的错误方式,Apple不喜欢它,所以尽量在你的最后解决问题。

+0

很高兴知道他们测试内存警告。我会看到如何使应用程序推迟重要的行动,直到内存情况稳定。 – 2012-07-27 13:50:21

相关问题