iOS应用程序内存不足,而不会收到低内存警告

前端之家收集整理的这篇文章主要介绍了iOS应用程序内存不足,而不会收到低内存警告前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个现有的应用程序,我做了一些最近的更改,我一直在测试这些更改.该应用程序在我测试的每个iPad(iOS 4和iOS 5)上工作得很好.在我的应用程序中加载了几个(50)图像重的视图后,我得到一个低内存警告,我的viewDidUnload方法调用,他们正确地清除所有的控件,我的内存映像缓存清除自己,应用程序继续正常.

然而,在iPhone 4和iPhone 4(iOS 5.0.1和iOS 5.1)上,我遇到了一个问题,即我的应用程序内存不足而没有收到低内存警告.在加载几个不同的视图后,最终会出现一个新的视图,大部分是空白的,在控制台上我看到内存分配消息,整个手机变得无响应,有时会杀死我的应用程序.

这种发生的特定视图每次都是不同的,所以它与任何一个视图无关,只是随着时间的推移,内存的积累.我也确认我也没有内存泄漏.

这个现在的问题是相似的:

IOS app killed for Low Memory but no Memory Warning received

那个答案表明,如果我被困在一个循环中,可能会发生这种情况,但我很确定我的代码不会停留在任何循环中.我只是在UINavigationController中从一个视图点击到另一个视图,并在每个视图中加载多个图像.另外,另一个问题是在iPad上发生的,iPad上没有看到这个问题,只有iPhone.

BTW,我已经尝试通过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

解决方法

过去一周,我一直在等待类似的问题.我正在做一些不同的事情,但是与图像有些相关.

您不会说所有这些图像所在的位置 – 希望您将它们写入文件系统,然后使用[UIImage imageWithContentsOfFile](或使用CGImageRefs,然后使用CGImageSourceCreateWithURL)将其加载到视图中.您想要避免的是将内存中的图像(不会在iOS中交换!).

在我的情况下,我有一些mmap内存来保存图像,我甚至已经取消映射内存(将它同步到文件系统),但是由于同步需要很长时间,因此我被“取消”了该未锁定的内存.我所做的就是在每个这些文件调用fcntl(fd,F_FULLSYNC)来强制系统刷新每个块,然后再继续.

猜你在找的iOS相关文章