我正在使用带有 iOS 9.0 SDK 和 ARC 的 XCode 7.0,所有分析/测试都是在装有 iOS 9 的 iPhone 5S 上完成的。编辑:对于所有屏幕截图,它是单次运行:我运行直接从 xcode 调试构建,然后手动将 Instruments 附加到它。所以屏幕截图都来自完全相同的单次测试运行。这种内存增长(根据 xcode View )是 100% 可重现的。
我的应用程序下载 ZIP 文件,解压缩它们,并将它们添加到相机胶卷中。我已经确保分析和捕获内存泄漏(即缺少 CGContextRelease)以及使用 @autoreleasepool
等
在解压缩期间,在 xcode 中我看到内存使用量快速上升,直到解压缩完成才结束,我无法解释这一点,因为我看不到 Instruments 中没有任何对象被保留。内存永远不会被释放(根据 xcode 的内存 View )。在我的测试运行结束时,我看到使用了 236MB,在解压缩期间没有内存警告。如果我使用 Instruments 的分配工具,我会看到使用了 50.2MB 的堆和匿名 VM。这是一个巨大的差异!
我做的第一件事是假设 [UIImage imageNamed:
是罪魁祸首(缓存等),因为我有很多动画 UIImageView,所以我花时间从我的代码中删除所有 imageNamed,并且使用 imageWithContentsOfFile
代替。那根本没有帮助。我使用 iOS 8 照片框架将解压缩的图像添加到相机胶卷,如下所示:[PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:[NSURL fileURLWithPath:filePath]]
我花了相当多的时间浏览 Instruments 和网络文章,但无济于事。谁能回答这些问题?
- 为什么 xcode 内存使用与 Instruments 之间存在差异——这正常吗?
- 我认为这些数字对于发布这样的应用来说太高了,我必须在上传到应用商店之前改进它,对吗?
- 看看下面的屏幕截图,您能给我一些建议吗?我可以从哪里开始寻找问题?
非常感谢您的帮助。当然,我会发布任何有帮助的源代码,我只是不确定从哪里开始......
最佳答案
最常见的原因是您的配置。默认情况下,当您在 Xcode 中运行时,您会在 Debug模式下构建。当您在 Instruments 中进行分析时,默认情况下,它会构建 Release。您可以修改方案中的运行和配置文件配置以更改此设置。
关于ios - 为什么 XCode 和 instruments 内存使用之间存在巨大差异,这可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32822679/