【问题标题】:App crashes with "Terminated due to memory issue" for SKAction(named:)应用程序因 SKAction 的“因内存问题而终止”而崩溃(命名:)
【发布时间】:2017-09-07 11:17:39
【问题描述】:

当我在操作不存在时调用 SKAction(named:) 时,应用程序崩溃并显示“由于内存问题而终止”。

我的应用程序有许多 sprite kit 场景(.sks 文件)和 sprite kit 动作文件。当按下精灵时,我尝试为该对象实例化一个 SKAction。如果我请求的操作不存在,应用程序将崩溃而不是返回 nil。似乎系统正在搜索所有操作并且以某种方式没有释放内存。有没有人遇到过这个问题?如果减少sks的数量,似乎可以解决问题,但是我需要所有sks的

func runAction(node:SKNode, actionName:String) {

    guard let action = SKAction(named: actionName) else {

        print("!!!!!!! action not found:  \(actionName)")

        return
    }
    print("found action")
    node.run(action)

}

【问题讨论】:

    标签: skaction


    【解决方案1】:

    找不到动作,所以它会无限打印出“!!!!!!!找不到动作:(actionName)”,直到没有更多的内存。

    添加一个计数或其他东西,以便有最大尝试次数,可能使用调度队列,以便您可以添加延迟,当然还要验证您尝试发送的操作是否存在。

    【讨论】:

    • 如果调用失败,它只打印一次消息并退出乐趣。没有重复调用 SKAction(named:)
    • 哦,我把node.run(action) 误读为再次调用相同的函数。这就是它所付出的一切?内存问题,没有其他细节?
    • 是的。很不稳定。内存问题似乎发生在各个地方(谷歌它)。似乎它在其“db”中搜索该操作,但似乎存在内存泄漏或其他问题。
    【解决方案2】:

    在我的 iPad 上安装 iOS 11.0 beta 后,此功能变得更加稳定。如果未找到操作,它仍然会崩溃,但当操作存在时,它似乎更稳定。

    作为一种解决方法,我改用 SKAction(named: from:)。首先,我获得了动作 sks 文件的 url,然后尝试从该文件中检索 SKAction。由于这是对操作的直接调用,因此不会发生内存问题。

    【讨论】:

      猜你喜欢
      • 2015-11-10
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多