【问题标题】:iOS Constantly growing memory usageiOS 不断增长的内存使用量
【发布时间】:2013-10-08 10:06:41
【问题描述】:

我目前正在开发一款不久前开始的游戏。进展很好,一切运行顺利,但我决定尝试使用 XCode Instruments 来检查我的代码中是否存在任何泄漏。我正在使用 ARC,并且仅在删除其他对象时才添加新对象(我的游戏内部工作的一部分),但总内存大小在运行时不断增长。

我的游戏完全是程序生成的,不需要资源,它也只使用了几个仅用颜色映射的多边形,因此没有纹理。我预计它应该只需要几个 MB 即可运行(开始时),但它只会不断增长。

现在,我注意到了一些有趣的事情……用尽大部分数据的是一个名为 IOAccelResource 的条目。这很奇怪,因为我不使用任何加速度计/陀螺仪/罗盘数据。我的项目中什至没有引用 CoreMotion 框架。

数据的第二个主要用途是四个不断增长的 malloc 的集合。还有几个保持相对不变。

这两个条目虽然不被程序视为泄漏。当我告诉 XCode 分析我的代码时,它并没有指出任何问题。

所有其他条目都非常小,并且围绕同一点波动,或者保持不变。

这里是麻烦条目的截图:

有什么建议吗?

【问题讨论】:

    标签: ios debugging memory-management memory-leaks instruments


    【解决方案1】:

    如果您指的是“Overall Bytes”或“#Overall (elements)”继续增长,这通常不是问题,因为它会跟踪总内存使用情况(换句话说,它不考虑释放的内存)。

    您应该关注的是“Live Bytes”和“#Living(元素)”,并确保它符合您的期望。

    您还将看到,如果“总字节数”持续增长,您的应用不会崩溃。另一方面,如果“Live Bytes”持续增长,您的应用就会崩溃。

    Apple 已经意识到仪器配置文件中的信息过多,这就是为什么在 xCode5 中,它直接将重要信息提炼到 xCode 中:运行您的应用程序时,单击导航器中的第 6 个图标(调试导航器) (xCode 的左栏)。您将看到仅跟踪“Live Bytes”的内存指示器。

    此外,如果您有权访问 WWDC 2013 视频,请查看会话 410:修复内存问题。

    希望这会有所帮助。

    【讨论】:

    • 啊,谢谢伙计!我真的很担心会发生一些非常严重的事情。看来我的内存管理很完善!
    • 我发现情况并非如此。当我查看仪器时,我的应用程序显示出完美的内存管理。当我查看 XCode 中的内存图时,它显示我的应用程序会持续分配大约 1.5MB 的内存,但每次触发计时器时都不会释放这些内存。我愿意接受 Instruments 的调查结果并继续前进,但我很担心。
    • 这里相同:Xcode 内存量表不断增长,但分配 + 泄漏工具表明内存正在得到正确管理。不知道我应该得出什么结论......
    猜你喜欢
    • 2013-10-20
    • 2016-02-24
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 2015-08-07
    • 2013-08-27
    相关资源
    最近更新 更多