如何在Swift中调试内存警告?

时间:2015-03-11 23:22:59

标签: ios debugging swift memory-leaks ipad-mini

我有一个我正在开发的应用程序,它在iPad mini 1上长时间使用后肯定会出现一些内存问题。调试器将开始吐出内存警告,直到它崩溃,我想知道我们代码中的控制器是什么造成这个问题。

以下是调试消息的示例。

2015-03-11 17:04:02.420 PROJECT_NAME[154:4100] Received memory warning.

我得到的Debug消息给出了一个时间戳,项目名称中包含一些信息。如何使用它来查找导致此问题的控制器?括号信息似乎不是代码行号,因为它之前的名称是项目名称而不是文件名。

我一直在想的另一种选择是在控制器didRecieveMemoryWarning()函数中放置一个print语句。

在Swift中追踪和调试这些内容的最佳方法是什么?

如果我需要提供更多信息,请告诉我。

更新

我也很想知道Swift内存泄漏的一些常见原因?在我的情况下,我使用UITableView导航控制器到另一个UITableView。第二个表视图包含一些主要使用文本和小图像的自定义单元格。我假设图像(虽然很小,主要用于审美目的)是什么导致了这个问题。我将使用旁边建议的仪器进行调试,以确切了解这是做什么的。

更新

所以我一直在探测器中试图找到可能导致内存泄漏的东西,而探查器中的所有东西似乎都是代码,这是库代码,但我做了一些筛选后发现了一些引用在我的代码中的东西。一直反复如下。

enter image description here

此代码位于来自Nib方法的自定义UITableViewCell唤醒内,与设置图像的初始状态有关,该状态将根据属于该单元格的数据的状态而发生变化。我猜这个动态图像加载可能导致其中一个问题。问题是,我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:5)

此时,如果要确定内存问题的根源,则需要更换齿轮。使用WWDC 2013视频Fixing Memory Issues或WWDC 2012 iOS App Performance: Memory中所示的工具。使用“仪器”中的“分配”工具,您可以识别正在分配和未分发的内容。只有这样,您才能继续解决问题(例如,修复任何强大的参考周期等)。在您确定问题根源之前,我们无法建议您如何解决问题,而且仪器将帮助您实现这一目标。

虽然这些演示文稿用Objective-C说明了这种做法,但Swift中的原则是相同的,并且在仪器中使用分配和泄漏工具是相同的。