每次滑动到下一页时,内存都会增加很多。仪器泄漏报告和静态分析仪都可以

Posted

技术标签:

【中文标题】每次滑动到下一页时,内存都会增加很多。仪器泄漏报告和静态分析仪都可以【英文标题】:memory increase a lot everytime I swipe to the next page. Instrument leak reports and static analyzer is OK 【发布时间】:2012-12-30 09:00:52 【问题描述】:

在 xocde 中使用 ARC。 app的素材页面是这样的:

应用程序运行良好,但是当我滑动到下一页时,内存增加了很多(每页大多为 30k),因为仪器分配给出了以下内容:

详情如下:

我不明白出了什么问题?我的环境是:xcode 4.5.2,启用了 ARC。真的很感激有人可以帮助我。

重点是:

然后是heapshot详细信息:

我很确定在滑动到下一页时我删除了所有视图对象,因此应用程序应该清理上一页中这些视图对象的内存。就是不知道为什么这304字节的对象会增加内存,这里有什么问题。

【问题讨论】:

第一张图片在英语社区特别有用... 看起来 libCGFreetype 中的FT_Outline_Decompose 正在泄漏CGPath 的... neilsbot,我怎样才能找到泄漏的确切位置?我的应用程序中当然没有这样的 CGPath 代码。 【参考方案1】:

这似乎是一个废弃记忆的案例。废弃的内存并不完全是内存泄漏,因为您不会丢失该内存的踪迹。相反,它是在可能/应该被释放时未释放的内存,因此整体内存使用量增加。

查看this article,了解在 Instruments 中使用 heapshot 分析处理此问题的方法。

关于 heapshot 分析方法的另一个有趣的分步讨论是here。

【讨论】:

谢谢塞尔吉奥。在这里,我通过 heapshots 得到了 img: 从 heapshot 中,我看到问题与视图或其他 Objective-C 对象无关;相反,它似乎是一些较低级别的核心图形东西。您能否解释(在您的问题中)您如何显示每个页面?你在使用来框架吗?你在做核心图形吗? Instruments 中的“详细视图”是否为您提供了有关该内存分配位置的一些提示? 当用户向左滑动时,应用程序转到下一页从数据库中读取数据集。这里是简单的逻辑:1、删除当前页面中的所有视图。 2、读取数据集。 3、循环数据集(每页15条记录),将UILabel作为子视图添加到当前页中。 尝试注释掉那段代码以找出废弃内存的分配位置。即,不要读取新的数据集(当然页面内容不会改变,但没关系),看看内存问题是否仍然存在;如果没有,你已经找到了你没有释放的内存;否则,请尝试另一个假设。 这很有趣,当我滑动到新页面时,内存增加了。但是如果我滑动回上一页,内存保持不变。我相信应用程序缓存了视图对象并且没有及时释放它们。就我而言,这是不可接受的,因为不同类型数据的页面太多。

以上是关于每次滑动到下一页时,内存都会增加很多。仪器泄漏报告和静态分析仪都可以的主要内容,如果未能解决你的问题,请参考以下文章

CollectionViewCell里面的UIViewController内存问题

单击按钮移动到下一页时出错

移动到下一页时不显示对话框[重复]

导航到下一页时,Chrome (iOS) 中的奇怪自动滚动/跳转行为

Nextjs如何在转到下一页时不卸载上一页(保持状态)

带有 uitableview 的基于页面的应用程序;转到下一页时如何显示详细视图并在表格中显示其他数据?