【发布时间】:2014-10-15 02:02:08
【问题描述】:
我的应用程序内存不足。在 XCode 的内存报告中,我可以看到设备在关闭之前的内存使用率上升到 500Mb 以上一点。
在 Instruments 中进行分析时(使用分配工具或泄漏工具)不会发生这种情况。该进程运行高达约 100Mb,并在运行任务的内存密集部分时达到平衡。该应用在 Instruments 中运行时不会崩溃。
什么会导致差异?
运行的紧张过程是利用 UIWebView 来确定多个内容页面的长度。 Web 视图位于后台并加载页面。加载完成后,它会计算大小并加载下一页,直到计算出所有页面的长度。
由于我无法在 Instruments 中遇到相同的内存问题,因此我在所有主要部分的 init 和 dealloc 方法中添加了日志记录,并且可以确认它们正在按预期分配和释放。
在那之后,我尝试假设分配和释放正常进行,但我只是分配的速度比系统重新分配内存的速度要快。我尝试在内存用完之前尽早停止该进程,以查看内存使用量是否会下降。 XCode 的内存报告确实报告了小幅下降,但幅度不大——即使在静置几分钟后也是如此。
我的下一步是尝试简化流程,直到问题被消除。
有没有其他人遇到过类似的情况,即 Instruments 中的应用程序与 Instruments 中的应用程序完全不同,或者对可能导致这种情况的原因有任何解释?
【问题讨论】:
-
尝试更频繁地使用
@autoreleasepool。 -
我会查看这两个方案并确保设置相同。分析器可能正在使用非调试配置,而“运行”正在使用调试配置。我还要特别注意在后者中使用僵尸,这会占用内存来跟踪所有释放的对象。见developer.apple.com/library/mac/recipes/…
-
@Rob 谢谢,僵尸设置原来是问题所在。我之前检查过探查器和“运行”之间的配置,但错过了僵尸设置。如果您提交您的评论作为答案,我会接受。
标签: ios objective-c xcode memory xcode-instruments