iOS泄漏工具与活动监视器

时间:2013-05-10 09:50:44

标签: ios memory-leaks activity-monitor

我正在调试由其他人编写的iPhone应用程序,它不使用arc。我尝试过使用arc,但是他们有很多旧代码使用了一些c样式的void指针,所以当我这样做时程序会崩溃。

我已经放弃了这个想法作为一个失败的原因。问题是分配/泄漏工具不显示内存泄漏,但活动监视器显示每次用户滑动更改页面时内存泄露。 (每次刷卡大约1.5兆)不用说程序崩溃了。

作为一名c ++程序员,我有一些客观的经验,但我并不了解记忆所处的所有细节。有人可以给我一些关于如何追踪这一点的指示。

由于

1 个答案:

答案 0 :(得分:1)

我强烈建议您花一天时间深入阅读Objective-C编程指南(保留/发布/自动发布部分),直至点击为止。此外属性几乎肯定在这里发挥。

具体来说,一些内存已由一个太多的保留,一个属性设置器作为副作用,或一个保持UI元素的视图(被隐藏但未从其超级视图中删除)保留。

在“仪器分配”视图中,您可以看到未发布的对象类型 - 这应该有助于跟踪它。

另一个技巧是将日志语句放在dealloc方法中,以查看哪些大对象未被释放(控制台中没有日志语句)。

您的最后一个选择是发布您的代码并在此处寻求帮助,或雇用某人来帮助您完成此操作或ARCify代码。

编辑:我周末有一个关于如何跟踪任意对象的想法 - 以了解他们是否被释放,所以我创建了一个Object Tracker project。使用Tracker类,您可以标记要跟踪的对象,当对象被解除分配时,您将在Xcode中看到一条日志消息。此外,您可以查询类对象以查看仍然存在的对象。

它的工作原理是使用objc_setAssociatedObject()将自身附加到跟踪对象,然后在释放该对象时自行记录(从而释​​放跟踪器对象。

因此,您可以在项目中尝试一些对象 - 视图,滚动视图,图像,数组等,并查看是否至少可以找到未被释放的对象。

希望这有帮助。