【问题标题】:Swift unbounded memory growth快速无限的内存增长
【发布时间】:2016-08-23 20:32:41
【问题描述】:

我正在使用 SpriteKit 和 GameCentre 在 XCode7.3 中制作 Swift 2.2 应用程序。

我的问题是应用程序使用的内存继续增长(大约每秒额外占用约 20MB)。最终这会导致应用程序由于内存问题而崩溃。我在设备 (iPhone 6s) 和模拟器上运行时得到了类似的结果。

我已经尝试通过 Instruments 运行它(下面的屏幕截图),这似乎表明了问题。

Instruments screenshot

从深入分析仪器的输出来看,它似乎表明在 460 KiB 的 malloc 调用中发生了内存泄漏。我还没有设法从堆栈跟踪中分离出导致这种情况的原因。

仪器输出可用 - 不确定如何在此处附加。关于从哪里开始的任何建议/指示?

【问题讨论】:

  • 对于这种大小的错误,很有可能你在根本上做错了什么。您在代码中使用malloc 吗?您是否在需要的地方使用了弱引用?
  • 代码都是 swift2 - 所以没有使用直接的 malloc 调用。如果我正确读取仪器输出,则实际泄漏发生在重复的 malloc 调用中。

标签: ios swift


【解决方案1】:

尝试二进制搜索您的代码。注释掉你一半的电话。仍然出现内存泄漏?好的,现在您已将搜索范围缩小了一半。注释掉剩下的一半。没有内存泄漏?太好了,您刚刚将问题缩小到代码的四分之一。一旦您开始获取导致泄漏的特定代码,您将从 StackOverflow 中获得更多有用的答案。

【讨论】:

  • 为原始问题的含糊道歉 - 不幸的是我基本上被卡住了。我一直在检查我的代码并添加打印语句来检查每个方法调用何时发生,我也一直在注释掉代码块。我现在已经将所有内容都削减到最低限度(我正在删除代码)并且内存泄漏只会加速(而不是 ~20M 跳转使用的内存现在上升了 ~50M)
【解决方案2】:

已找到答案 - 原因是 Apple/Spritekit 代码中的错误。

作为设置场景的一部分,我将 SKView 的 showFields 设置为 true。一旦我禁用此(错误),内存泄漏问题就会消失。

通过搜索我找到了 - https://forums.developer.apple.com/thread/27870

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-03
    • 2016-07-11
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2012-09-06
    相关资源
    最近更新 更多