为什么XCode和乐器内存使用之间的巨大差异,是否可以?

xap*_*hod 8 iphone xcode cocoa-touch ios

我正在使用带有iOS 9.0 SDK和ARC的XCode 7.0,在带有iOS 9的iPhone 5S上进行所有分析/测试.编辑:对于所有屏幕截图,它只是一次运行:我直接从xcode运行调试版本,然后手动附带的仪器.因此截图全部来自完全相同的单次测试运行.这种内存增长(每个xcode视图)100%可重复.

我的应用程序下载ZIP文件,解压缩它们,并将它们添加到相机胶卷.我已经确保分析和捕获内存泄漏(即缺少CGContextRelease)以及使用@autoreleasepool

在解压缩期间,在xcode中,我看到内存使用率快速上升,直到解压缩完成后永无止境,我无法解释这一点,因为仪器中没有任何物体可以看到被抓住.永远不会释放内存(每个xcode的内存视图).在我的测试运行结束时,我看到使用了236MB,在解压缩期间没有内存警告.如果我使用Instruments的分配工具,我会看到50.2MB的堆和匿名VM使用.这是一个巨大的差异!

我做的第一件事是假设这[UIImage imageNamed:是责备(缓存等),因为我有很多动画UIImageViews,所以我花时间从我的代码中删除所有imageNamed,然后使用imageWithContentsOfFile.这根本没有帮助.我使用iOS 8 Photo框架将解压缩的图像添加到相机胶卷中,如下所示:[PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:[NSURL fileURLWithPath:filePath]]

我花了相当多的时间来通过仪器和网络文章,但无济于事.谁能回答这些问题?

  1. 为什么xcode内存使用和仪器之间的差异 - 这是正常的吗?
  2. 我认为这些数字对于发布这样的应用来说太高了,我必须在上传到应用商店之前改进它,对吗?
  3. 查看下面的屏幕截图,您可以在哪里建议我可以开始寻找问题吗?

非常感谢您的帮助.当然我会发布任何有用的源代码,我只是不知道从哪里开始......

XCODE内存使用236 MB xcode内存使用情况

仪器 仪器vm摘要

仪器分配总结

Rob*_*ier 4

造成这种情况的最常见原因是您的配置。默认情况下,当您在 Xcode 中运行时,您会在调试模式下构建。当您在 Instruments 中进行分析时,默认情况下,它会构建 Release。您可以修改方案中的运行和配置文件配置来更改此设置。

  • 通常,您会在发布版本上运行 Instruments,因为这就是您要发布的版本。优化可以极大地影响性能,因此 CPU 分析(这是 Instruments 的一种非常常见的用途)在发布中几乎没有用处。内存使用*通常*不会发生如此显着的变化。 (3认同)