【发布时间】:2012-04-02 23:10:32
【问题描述】:
我一直在为 iPad 开发一个图形密集型应用程序。我已经能够在 iPad 2 上挤出相当多的性能,但新 iPad 的@2x 图形在内存部门中占据了相当大的优势。使用 Instruments 中的活动监视器,我可以看到我的应用程序的大小迅速增长到 300MB-400MB 范围,但我没有收到任何内存不足的通知。我正在使用UINavigationController 来管理我的视图,因此深入堆栈会对内存产生累积影响,最终会终止。我在 iPad 2 上没有遇到这个问题,我收到了预期的内存不足通知。我的应用程序已被编码为尽可能多地清理并在该设备上运行良好。
我已经阅读了许多类似的问题:
IOS app killed for Low Memory but no Memory Warning received
iPhone app uses 150 MB memory and still no low memory warning!
这些建议似乎都没有帮助。
我已插入代码以强制发送内存不足通知:
[[UIApplication sharedApplication] _performMemoryWarning];
这确实会导致非活动视图按预期卸载并将内存消耗恢复正常。这使用私有 API 并且是 hack,因此出于实际原因不是解决方案。 如何让我的设备正确响应内存不足的情况并让我的应用知道它需要清理?
【问题讨论】:
-
您是否也在 iPad 2 上使用 iOS 5.1 进行过测试?
-
您能否确认使用 iPad 和相同的 iOS 5.1,当您加载完全相同的图像序列(iPad2 为 \@1x,iPad3 为 \@2x)并查看控制器时,应用程序终止iPad3 并且不在 iPad2 上终止?还有另一个测试,如果你去掉@2x 图像,你会在 iPad3 上收到内存警告(当然是加载更多图像)还是应用程序仍会终止?
-
我可以确认相同的事件序列在 iPad 2(运行 5.1)上可以正常工作,但在 iPad 3 上会导致崩溃。我必须在 iPad 2 上非常辱骂才能强制它进入内存不足的情况。
-
当我删除所有 @2x 图像时,我的应用程序运行时占用与 iPad 2 相同的空间并且运行良好。
标签: ios memory-management ipad-3