【问题标题】:iOS memory usage increasing, can't find the culpritiOS内存使用增加,找不到罪魁祸首
【发布时间】:2015-04-04 00:12:53
【问题描述】:

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

我想 Xcode 在这里是错误的,但是为什么我的应用会被 iOS 杀死?

仪器显示了这一点 - 峰值是核心数据查询,然后是图像下载 - 峰值约为 9.5MB,其余约为 8.5MB

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

Xcode 的内存监视器显示了这一点 - 每次迭代都会增长数 MB。

有什么方法可以让 Instruments 向我展示 Xcode 看到的任何内容?或者有没有更好的工具可以用来找出所有这些内存的去向?

谢谢!

【问题讨论】:

  • 当您通过分析器运行应用程序时,我相信它默认为发布版本。我想知道当你通过 Xcode 运行它时,你是否正在构建一个调试版本。检查您的方案并确保两者构建相同的版本。
  • “运行”和“配置文件”都设置为在方案编辑器中调试。除非有其他地方可以设置?
  • 不,这正是我考虑的地方。看到配置文件的发布版本是很常见的(并因此看到与调试版本不同的行为)。而且,当然,我假设在 Instruments 中,在“记录选项”选项卡中分配工具的“记录类型”设置下,您正在记录所有类型?很好奇,很好奇。一只黑森虫。
  • 最后一个想法:我遇到过 Instruments 莫名其妙地对旧版本的应用程序进行分析的令人烦恼的情况。我建议您实际上不仅要进行干净的构建,而且还要在重建之前从设备/模拟器中删除应用程序。
  • 我尝试删除该应用程序,但没有成功。还尝试更改构建类型以在 AFNetworking 等的 Cocoapods 方案中进行调试并再次进行分析,仍然是相同的行为。奇怪!

标签: ios xcode afnetworking instruments


【解决方案1】:

根据 Xcode 中的内存监视器,这会导致无限的内存增长(并最终导致内存警告和强制退出) - 但使用分配工具分析内存使用情况表明内存使用情况是稳定的。

相信仪器和分配信息 - 不是 Xcode 中的内存监视器。内存监视器图是完全不相关的。忽略它。

这并不是因为 Xcode 中的内存监视器没用或错误。这是因为 内存管理 对于调试版本与发布版本完全不同(Instruments 使用发布版本)。在 Swift 中尤其如此(你不说你是否使用 Swift)。

在设备上观察内存使用情况,在发布版本中观察。否则,你会完全被误导。

【讨论】:

  • 这绝对看起来像这样。我们让应用程序在发布版本中运行了几千次有问题的代码迭代,完全没有问题。不过,将 Profile 方案设置为“调试”会导致发布版本被分析,这似乎仍然很奇怪。
猜你喜欢
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多