iOS内存使用量增加,找不到罪魁祸首

12

我正在尝试使用AFNetworking 2.5下载大量图像并将它们流式传输到磁盘。根据Xcode中的内存监视器,这会导致无限制的内存增长(最终会出现内存警告和强制退出),但使用分配工具对内存使用情况进行分析后显示,内存使用情况是稳定的。

我想Xcode在这里可能是错的,但为什么我的应用程序会被iOS杀死呢?

Instruments显示了这个 - 峰值是Core Data查询,然后其余的是图像下载 - 峰值约为9.5MB,其余部分保持在8.5MB左右。

Instruments

我还尝试过Heapshot Analysis - 显示了一点点增长,但远远不及Xcode报告的数量。

Heapshot Analysis

Xcode的内存监视器显示了这个 - 每次迭代增加多个MB。

Xcode Memory Usage

有没有办法让Instruments显示我看到的Xcode内容?或者是否有更好的工具可以用来查找所有这些内存去向?

谢谢!


1
当您通过分析器运行应用程序时,我相信它默认为发布版本。我想知道当您通过Xcode运行它时,是否正在构建调试版本。检查您的方案并确保两个版本构建相同。 - Rob
“Run”和“Profile”在方案编辑器中都设置为调试模式。除非还有其他地方可以设置? - Nathan Gaskin
不,那正是我在想的地方。通常会看到为配置文件发布版本(并因此看到与调试版本不同的行为)。当然,在Instruments中,在“记录选项”选项卡下的“已记录类型”设置中,您假定正在记录所有类型?非常好奇。这是一个Heisenbug。 - Rob
1
最后一点建议:我曾经遇到过棘手的情况,即Instruments不知何故在对旧版本的应用程序进行分析。我建议你不仅要进行干净的构建,而且在重新构建之前将应用程序从设备/模拟器中删除。 - Rob
我尝试删除应用程序,但没有成功。还尝试在Cocoapods方案中更改构建类型为调试,例如AFNetworking等,并再次进行分析,但仍然出现相同的行为。奇怪! - Nathan Gaskin
1个回答

25
根据Xcode中的内存监视器显示,这会导致内存不断增长(最终导致内存警告和强制退出)- 但使用分配工具进行内存使用情况的剖析表明,内存使用稳定。
相信Instruments和Allocations信息 - 而不是Xcode中的内存监视器。内存监视器图表完全无关紧要,请忽略它。
这并不是因为Xcode中的内存监视器无用或错误。而是因为调试版本与发布版本的内存管理完全不同(Instruments使用发布版本)。在Swift中尤其如此(您没有说明您是否使用Swift)。
仅在设备上,并且仅在发布版本中观察内存使用情况。否则,您将被彻底误导。

2
这绝对看起来是这种情况。我们在发布版本中运行了几千次有问题的代码迭代,但没有出现任何问题。不过,将配置方案设置为“调试”会导致发布版本被分析,这似乎仍然很奇怪。 - Nathan Gaskin
这是2023年。这仍然是真的吗? - unobatbayar
@unobatyar,你是否认为它不是这样?如果是,那么请给出另一种答案。 - matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接