gpt4 book ai didi

ios - IOS7和 "Terminated due to Memory Pressure"中的内存管理

转载 作者:行者123 更新时间:2023-11-29 02:52:55 24 4
gpt4 key购买 nike

我做以下所有事情的原因:我有一个 GPS 跟踪应用程序,它应该全天在后台运行。当我将应用程序置于后台时,内存使用量不会下降。当应用程序进入后台时, View 似乎不会从内存中删除...这就是为什么应用程序在 iPhone 正常使用的几个小时内关闭...根据 IOS6 的经验 - 内存使用量应该下降到 cca 8KB。

然后我尝试调试/隔离问题......

我使用 UIMapKitView 创建了简单的 ViewController 只是为了确保该 View 消耗大量 RAM(例如:12-17MB)。当应用程序进入后台时,应用程序使用相同数量的 RAM,直到出现“因内存压力而终止”消息。尽管如此 - 有时内存会降低到 4KB,但一切正常。问题是因为它的工作有点“随机”,而且应用程序非常简单。

我可以手动释放 View 占用的 ​​RAM 吗?例如:设置 self.view = nil?我应该这样做吗?

我还注意到“- (void)didReceiveMemoryWarning”并不总是在应用程序被杀死之前调用。我希望当操作系统需要更多内存时,它会首先释放 View ,而不是要求我通过此方法清除可以清除的任何内容...这不是有点奇怪吗?

最佳答案

Apple 重新设计了 VC( View Controller ) View 的加载方式——我想说从 iOS 5 开始? iOS 6?过去,当 VC 不在最前面并且需要内存时,系统会卸载您的 VC 的 View 。

随着更改,VC 的 View 在 VC 处于事件状态时永远不会被卸载。 ViewDidLoad 在 VC 的生命周期中只被调用一次,而 viewDidUnload 根本不再被调用。

我不知道如果您将(非最前面的)VC 的内容 View 设置为手动查看会发生什么。当该 View 再次成为最前面时,系统会加载您的 View 层次结构吗?您必须尝试一下,但这是有风险的,因为我认为操作系统不再以这种方式设计。

如果您的 VC View 占用了大量内存,您可能需要重新构建您的应用,以便仅保留最前面的应用,并释放其他 VC(在保存它们的状态后)。

Apple 并没有让这类应用程序易于编写。相反,他们积极阻止它。 GPS 是一个巨大的耗电设备,因此保持它始终处于事件状态会快速耗尽用户的电池电量。

我记得在 5s 中听说过一个新的位置芯片,它会根据你的要求为你的应用记录位置数据的“面包屑痕迹”,即使它没有运行。您可能会研究一下,尽管它只适用于配备 A7 芯片和定位芯片的最新设备。

关于ios - IOS7和 "Terminated due to Memory Pressure"中的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24273405/

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