ios - 为什么 XCode 和 instruments 内存使用之间存在巨大差异,这可以吗?

标签 ios iphone xcode cocoa-touch

我正在使用带有 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 和网络文章,但无济于事。谁能回答这些问题?

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

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

XCODE 内存使用 236 MB xcode mem usage

乐器 instruments vm summary

instruments allocation summary

最佳答案

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

关于ios - 为什么 XCode 和 instruments 内存使用之间存在巨大差异,这可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32822679/

相关文章:

ios - 带有显示 UIPickerView 的 inputView 的 UITextField...如何在 IOS 7 中关闭半透明?

ios - 使用 MPMediaQuery 加载播放列表

ios - 为什么我们在 Swift 中写 "-> Void "?

ios - ios9下popViewController有时动画消失

ios - 有没有办法在 swift 4 中更改 UINavigationBar 的背景颜色

ios - Xcode 无法生成 Swift UI 预览 - 由于内部错误 : planningFailed,构建中止

ios - 通过 UIButton 从 Appdelegate 导航到另一个 View

IOS在另一个类中创建uitableview委托(delegate)

更新后 Xcode 找不到模块

iphone - 为什么我在 iPad 上运行时每次都必须删除 DerivedData 项目文件夹