gpt4 book ai didi

iOS 并不总是调用 didReceiveMemoryWarning

转载 作者:行者123 更新时间:2023-11-28 19:24:41 32 4
gpt4 key购买 nike

我正在寻求有关一个非常具体的内存管理问题的帮助,其中 didReceiveMemoryWarning 在应该被调用的情况下似乎没有被调用。

我有一个简单明了的应用程序,它是一个有页面的故事。我有一个外部 View / Controller 来管理页面 View / Controller 。每个页面 View 上都有一张大小合适的图片 (200-300k)。它很大,因为它是一个通用应用程序,所以它们都是 1024x768,然后针对 iPhone 进行缩小。我已经实现了 didReceiveMemoryWarning 来释放未使用的 Controller (无论当时是否显示)。当 didReceiveMemoryWarning 被调用时,该应用程序工作正常,但它并不总是被调用。在 iPod Touch 2G 上,如果我快速地从一个页面转到另一个页面,它通常会在不调用 didReceiveMemoryWarning 的情况下终止程序(我在此处放置了一个断点以查看)。在具有相同 RAM 量的 iPhone 1G 上,didReceiveMemoryWarning 会在合理的时间被调用,而且我永远不会耗尽内存。

在调用我的代码之前,日志按预期打印“接收内存警告级别 1/2”,但当我的应用程序在没有机会释放的情况下被杀死时,我没有在 iPod Touch 2G 的日志中看到它上内存。

我使用了静态分析和泄漏工具,内存配置文件看起来不错。我认为泄漏与问题无关。相反,问题是当内存紧张时,我的程序没有机会释放资源。当有足够的内存时,我确实希望在内存中保留看不见的页面 - 它允许快速分页并使用于更改页面的平移手势响应地工作。

有没有人看过这个?如果有人有提示,我将不胜感激。我也很好奇是否有人知道在什么情况下应该调用 didReceiveMemoryWarning。是否有可能是我的程序如此快速地吞噬了如此多的内存,以至于 iOS 没有机会释放内存?

最佳答案

当“太”快地分配大量内存时,内存警告似乎来得太晚,尤其是当应用程序在两次分配之间的运行循环中没有花费足够的空闲时间时。

尝试预检(尝试分配然后释放)内存,然后返回到运行循环,也许在您真正需要内存之前半秒。

关于iOS 并不总是调用 didReceiveMemoryWarning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4514890/

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