iOS内存使用量不断增加

时间:2014-08-01 22:07:35

标签: ios objective-c memory-management

我是iOS开发的新手。

我正在构建一个简单的总线计划应用程序,它可以发出HTTP请求,解析XML并显示/保存数据。我有四个表视图控制器和两个视图控制器。 当我启动应用程序时,Xcode内存报告告诉我它的内存使用量大约为18MB,这很奇怪,因为它只是一个简单的应用程序。我在应用程序商店看过类似的应用程序,但它们都不到10MB。由于它是一个公交计划应用程序,我让它每30秒发出一次新请求来更新时间。我注意到每次我更改视图以查看另一个计划时,内存使用量会增加,并且可能会达到50MB或更多。

我看了Xcode的仪器,看起来没有泄漏。我还查看了分配,看起来每次切换视图时,实时字节都会不断增加。

enter image description here

我有点不知道从这里做什么。有人可以指导我吗?提前谢谢。

3 个答案:

答案 0 :(得分:2)

使用快照查找内存蔓延。 (见:bbum blog

基本上,他们的方法是运行Instruments分配工具,获取快照,运行代码的迭代和另一个快照,重复3或4次。这将指示在迭代期间分配但未释放的内存。

在这种情况下,请在下载之间拍摄快照(现在称为不同的东西)。

要弄清楚结果,请披露以查看个别分配。

如果您需要查看对象的保留,释放和自动释放的位置,请使用仪器:

在仪器中运行,在分配中将“记录参考计数”设置为打开(您必须停止记录以设置选项)。允许运行问题代码,停止录制,然后搜索感兴趣的对象。之后,您需要向下钻取,您将能够看到所有保留,释放和自动释放的位置。

enter image description here

答案 1 :(得分:1)

很难说没有任何代码,但看起来你在某个地方有一个保留周期。

尝试向视图控制器添加dealloc方法,并确保在视图控制器消失时输入它。

你说你每30秒发一个新请求。如果使用视图控制器作为目标的计时器,则计时器具有对视图控制器的强引用,反之亦然。当视图控制器消失时,您必须使计时器无效。

答案 2 :(得分:1)

首先,看看@Zaph建议的堆镜头。在看到分配和未分发的内容方面,值得您花时间。

我使用的另一种技术是使用乐器过滤选项来过滤我应用中的类的显示。然后,我寻找具有异常数量的生活实例的类。例如,大多数视图控制器通常只有一个活动实例。如果有更多,那么有些东西会保留它们。块和通知监听器通常是原因。

在你的示例屏幕截图中,我注意到了我要调查的两件事。

首先,你有365个活核心动画需要大约30M。不知道为什么,但值得考虑。

其次,在底部附近,我注意到166个表视图单元格滚动视图。听起来很多。我无法看到你有多少个生命表视图控制器,但我想知道它们是否没有重新分配。过滤此列表有助于确定哪些不是dealloc' d。

最后,泄漏可能有助于发现问题,但大多数时候我们认为泄漏对于仪器来说是好的。因此,查看内存和已分配实例的数量是一个更好的指南,可以找到事物不被解除密切的地方。

相关问题