gpt4 book ai didi

iOS 应用程序内存不足但未收到内存不足警告

转载 作者:技术小花猫 更新时间:2023-10-29 10:39:37 24 4
gpt4 key购买 nike

我有一个现有的应用程序,我最近对其进行了一些更改,并且我一直在测试这些更改。该应用程序在我测试过的每台 iPad(iOS 4 和 iOS 5)上都运行良好。在我的应用程序中加载多个(50+)图像密集型 View 后,我收到内存不足警告,我的 viewDidUnload 方法被调用,它们正确地清除了所有控件,我的内存中图像缓存自行清除,应用程序继续运行很好。

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

每次发生这种情况的特定 View 都不同,因此它与任何一个 View 无关,只是随着时间的推移内存的积累。我还确认我也没有任何内存泄漏。

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

IOS app killed for Low Memory but no Memory Warning received

这个答案表明,如果我陷入循环,这可能会发生,但我很确定我的代码没有陷入任何循环。我只是在 UINavigationController 中从一个 View 单击到另一个 View ,并且每个 View 中加载了几个图像。此外,另一个问题特别发生在 iPad 上,我在 iPad 上没有看到这个问题,只有 iPhone 才看到这个问题。

顺便说一句,我已经尝试通过 NotificationCenter 注册低内存通知,并在我的应用程序委托(delegate)中有一个 applicationDidReceiveMemoryWarning 方法,并且在这两个地方都有断点,但都没有被调用。此外,调试器控制台中也没有显示低内存消息。

对可能发生的事情有什么想法吗?


添加于 2012 年 3 月 26 日:

有趣的是,当我在新 iPad 上测试我的应用程序时,它遇到了我在 iPhone 4 和 4s 上看到的相同问题,即未收到低内存通知。所以我想知道我是否遇到了与其他线程相同的问题:

The New iPad: Low Memory Warnings Not Appearing?

但是该线程上的开发人员正在测试一款仅限 iPad 的应用程序,因此不会在任何 iPhone 上测试并发现同样的问题。

我已经进行了一些广泛的测试,并列出了我正确收到低内存警告的设备和我从未收到过的设备。到目前为止,我只在 iOS5 或更高版本上看到这个问题,但是在装有 iOS 5.0 和 5.1 的 iPad1s 上我没有看到这个问题,所以这不仅仅是在 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)将它们加载到 View 中。您要避免的是将图像保存在内存中(在 iOS 中不交换!)。

在我的例子中,我有一些 mmap 内存来保存图像,我什至取消了内存映射(将其同步到文件系统),但由于同步需要很长时间,因此我被“收费”用于未同步的内存。我所做的基本上是对每个文件调用 fcntl(fd, F_FULLSYNC) 以强制系统在我继续之前刷新每个 block 。

关于iOS 应用程序内存不足但未收到内存不足警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9848147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com