0

我很惊讶 iOS 5.1 并没有像我预期的那样管理内存。当设备运行大量应用程序时,iOS 似乎不会在后台杀死占用内存的应用程序,但也会向我自己的应用程序发送内存警告。

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

如果 iOS 不会为我释放内存,我会徘徊,是否可以显示某种警报视图通知用户内存不足并且必须终止一些后台任务?

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

4

1 回答 1

5

iOS 在用内存警告打扰你之前做了很多事情,包括杀死后台应用程序。从 iOS 5 开始,iOS 甚至会尽可能少地用内存警告来惹恼你,这意味着只有在确实需要你摆脱正在使用内存但现在不需要的东西时,你才会得到一个(而且您可以在未来安全地重新创建,而无需花费数小时)。如果您的应用程序在没有先给您内存警告的情况下崩溃,则可能是您分配了太多内存,以至于系统在决定杀死您之前无法告诉您它的内存不足,原因是内存警告被安排在主线程的 runloop 上,直到您给 runloop 时间进行另一次迭代,您将不会收到警告。

此外,Apple 不希望您告诉用户存在内存问题。它是您的应用程序必须处理它,而不是用户!因此,如果在审查团队审查您的应用程序时出现内存警告,您的应用程序也会被拒绝(谣言说他们发送这些警告是为了测试您的应用程序对它们的反应)

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

于 2012-07-27T01:35:04.520 回答