你好,我的问题可能是通用的,我不是在问代码等。我只为iPhones开发iOS6.1及以上版本
当我运行我的应用程序时,它使用的RAM只会增长(当我在视图之间切换时(我有15个视图)。
然而,在我用分析器进行测试之后,它没有发现任何泄漏。此外,在仪器泄漏中也没有发现泄漏。
尽管我的应用程序内存不超过20 mb,但我仍然担心有些东西可能不太好。
我在用ARC,但公羊还在上升。
有什么方法可以检查什么会导致单向内存分配吗?
发布于 2013-12-22 04:59:31
如果内存继续上升,它可能是各种不同的东西,但“强烈的参考周期”是首要的怀疑。遗憾的是,这也不一定会出现在仪器的泄漏工具中。
在分配工具中做快照/代,找出哪些没有被释放(特别是如果它包含任何类),然后从那里开始。具体来说,运行应用程序的步伐,然后标记快照/生成,做更多,然后标记另一个快照/生成。查看第二个快照,查看自上一个快照以来已分配(但未发布)的快照,并将焦点放在类上。你很快就会找到凶手的。
有关实际演示,请参见WWDC视频iOS应用程序性能:内存。
例如,这里有一个健康的应用程序,我通过仪器的“泄漏”工具进行了描述,但我将重点关注“分配”工具:

在这篇简介中,我等待应用程序安静下来,点击“标记世代”按钮(由此产生了“A代”,这是我时间线上的第一个标志)。然后我去看了一看,然后就不看了,又做了“马克一代”,得到了“B代”。“增长”栏告诉我,在A代和B代之间,消耗了100 is,但没有发布。但我还不担心这一点,因为可能会有一些iOS内部缓存的UIKit元素。因此,我再重复一次这个过程,以获得“C代”。这很有趣,现在报告的增长率只有8.26kb,这是可以忽略不计的。这个,再加上一个干净的健康证明,从泄密仪器,使我觉得很好的风险,任何严重的记忆问题。
现在,让我们将其与一些具有严重问题的“强引用周期”的代码进行对比:

现在,这是一个完全不同的画面,尽管这个过程是相同的“现在和解散”过程,重复了两次。这告诉我,我几代人之间有1400万桶的增长,更值得注意的是,我可以清楚地看到有问题的增长曲线。值得注意的是,虽然分配工具明显地发现了一个严重的问题,但泄漏工具没有任何报告。
现在,在实践中,使用分配工具的现实世界经验可能会停留在这两个极端之间。您的应用程序可能有自己的缓存或模型对象,它们会慢慢占用内存,但是如果您对内存警告做出了正确的响应,则应该恢复该内存。不过,坦率地说,大多数设计良好的应用程序根本不应该生成内存警告(通常通过正确配置缓存、在适当情况下避免imageNamed、对于大型或不经常访问的数据转移到持久存储,等等)。其目标是使应用程序稳定在一些合理的基线内存分配水平上,并始终返回到该基线。
但是,在你对你的应用程序做一些基本的分析并诊断出你的内存问题之前,我们是不可能给你建议的。
https://stackoverflow.com/questions/20725363
复制相似问题