我有一个现有的应用程序,在其中进行了最近的一些更改,并对这些更改进行了测试。该应用在我所测试的每个iPad上(iOS 4和iOS 5)都能完美地工作。在我的应用程序中加载了多个(50+)图像密集视图之后,我会收到低内存警告,并调用了我的viewDidUnload方法,它们会恰当地置空所有控件,我的内存中图像缓存也会清除,然后应用继续正常运行。
然而,在iPhone 4和iPhone4s(iOS 5.0.1和iOS 5.1)上,我遇到了一个问题,我的应用程序在没有收到任何低内存警告的情况下就耗尽了内存。经过加载多个不同的视图后,最终会出现一个新视图,它大部分都是空白的,并且在控制台上看到内存分配消息,整个手机变得无响应,有时会强制退出我的应用程序。
此问题发生在不同的特定视图上,因此与任何一个视图都无关,只与时间累积的内存有关。我还确认我没有任何内存泄漏。
这个现有的问题很类似:
IOS app killed for Low Memory but no Memory Warning received
那个答案表明,如果我陷入了循环,这种情况可能会发生,但我相当确定我的代码没有陷入任何循环。我只是从一个视图点击到另一个视图,在UINavigationController中加载了几个图像。此外,另一个问题具体发生在iPad上,在iPad上我没有看到这个问题,只有iPhone上才有。
顺便说一下,我尝试通过NotificationCenter注册低内存通知,并在我的应用程序委托中有一个applicationDidReceiveMemoryWarning方法,并在两个断点处都设置了断点,但都没有被调用。此外,在调试器控制台中也没有低内存消息显示。
有什么想法可能正在发生什么?
添加于2012年3月26日:
有趣的是,当我在新的iPad上测试我的应用程序时,它出现了与iPhone 4和4s上看到的相同问题,即无法收到低内存通知。因此,我想知道是否遇到了与这个主题相同的问题:
The New iPad: Low Memory Warnings Not Appearing?
但是,那个主题上的开发人员正在测试一个仅适用于iPad的应用程序,因此不会在任何iPhone上测试并找到相同的问题。
我进行了一些广泛的测试,并列出了我正确接收低内存警告的设备列表以及我从未收到它的设备列表。到目前为止,我只在iOS5或更高版本上看到了这个问题,但在安装了iOS 5.0和5.1的iPad1上,我没有看到这个问题,因此这不仅仅是所有iOS 5设备上的问题。
以下是该列表:
正确的低内存警告
iPad1 4.2.1
iPad1 5.0
iPad1 5.1
iPad2 4.3.3
iPhone3G 4.2.1
iPod 3G 4.3.3
iPhone4 4.3.3
没有低内存警告
iPhone4 5.1
iPhone4s 5.0.1
iPad3 5.1