【发布时间】:2012-03-12 11:49:24
【问题描述】:
我正在开发一个 iPad(仅限)应用程序,但我偶然发现了一个奇怪的问题。该应用程序在 iPad 1 上出现内存警告后终止,但在 iPad 2 上运行良好。 我正在使用 ARC 并以 iOS 5 为目标。我使用笔尖,我的大部分资产都是使用 UIImageViews 显示的。我还有几百个按钮和大量手势识别器……我在 ARC 上重新观看了 WWDC11 视频(第 323 和 322 节),我似乎没有做任何特别的事情。
该应用程序是 UIImage 密集型应用程序,我正在使用 UIImage 制作大量动画。但是,我使用的是 initWithContentsOfFile 构造函数而不是 imageNamed 调用。我正在尝试防止图像被系统缓存。
我还使用 GCD 来安排声音效果和动画视图。我总是在主线程上这样做。
应用程序使用 UINavigationController,它的堆栈上永远不会有超过 1 个 UIViewController。我可以确认这是真的,因为 didReceiveMemoryWarning 只在当前视图控制器上被调用(我正在记录调用)。
我不明白的是,为什么 Instruments 在 Allocations 和 VM Tracker 工具中都报告了很高的数字(好像视图控制器没有被释放)。当我从一个视图控制器导航到另一个视图控制器时,Allocations 工具显示了一个小下降(这是我所期望的),但 VM Tracker Instrument 显示当我做同样的事情时脏大小没有下降。最终,该应用程序使用了太多内存并被终止(在 iPad 1 上)。当我在 iPad 2 上收到内存警告时,应用程序并没有终止...
感觉好像我的图像、声音或视图没有被破坏,内存也没有被回收......我的对象层次结构非常基本,不应该有任何类型的保留循环。我什至没有简单的代表...
你有什么建议吗?我真的不想只为 iPad 2 或更新版本发布这个应用程序......这是一个为孩子们准备的应用程序,这将是一个遗憾......我会很高兴得知我做错了什么,因为我真的想确保这个应用程序是最好的......
干杯, 尼克
【问题讨论】:
-
简短评论:我花了很多时间使用仪器寻找泄漏,但看起来没有。另外,如果有的话,我认为 iPad 2 最终会崩溃并烧毁,但它不会......
标签: objective-c ios ipad memory automatic-ref-counting