如何在 iOS 中跟踪负责堆增长的代码

Posted

技术标签:

【中文标题】如何在 iOS 中跟踪负责堆增长的代码【英文标题】:How to track the code responsible for Heap growth in iOS 【发布时间】:2013-07-06 12:39:10 【问题描述】:

我花了几天时间来解决这个问题。由于内存泄漏,我的应用程序在 iPod Touch 中崩溃了。

我已经通过 Xcode 中的 Instrument 准确监控堆增长,并确认代码正在使应用程序占用的内存在每个事件上都增加。

我需要在这里提一下,我正在使用 ARC,因此我真的没想到应用程序会因为内存问题而崩溃,尽管 ARC 在使用 Core Foundation 时没有帮助,但我没有在我的应用程序中使用 Core Foundation直接地。 但是 MBProgressHUD 已添加到我使用此框架的应用程序中。我没有为 MBProgressHUD 启用 ARC,因为它会导致大量内存增长。

我仍然无法跟踪导致我的应用内存增长如此之多并导致应用崩溃的主要问题/变量/代码。

P.S : Instrument 显示了一些导致大量内存分配的函数,但在这些函数中,我也不知道如何在启用 ARC 时释放这些变量(它是自动管理的)。

如果我的方向正确,请提出建议。

【问题讨论】:

【参考方案1】:

是泄漏还是分配更多?应用变慢的主要原因是使用了太多的自动释放对象。

【讨论】:

自动释放对象的数量与应用性能成正比 所以,1. 使用尽可能少的自动释放对象。 2.尽量忽略循环内的分配。 3. 重用指针变量 4. 减少任何数据源方法中的对象分配数量。为了获得更好的性能。 好吧,那是为了进一步防止它。我曾问过应该如何访问导致堆增长的函数/文件?可能有特定的代码引起了麻烦。我想解决这个问题

以上是关于如何在 iOS 中跟踪负责堆增长的代码的主要内容,如果未能解决你的问题,请参考以下文章

C# / .Net Framework 中的堆大小 - 它可以增长吗?如何增长? [复制]

如何阻止 SQL Server CE 3.5 更改跟踪表无限增长?

手写 asm.js - 你如何跟踪堆中的 javascript 对象?

停止与核心数据托管对象相关的堆增长

如何从 obj-c / ios 中的堆栈跟踪中获取源代码行

如何跟踪android应用程序消耗的峰值内存