2

这是我的代码:

ship.runAction(SKAction.waitForDuration(5), completion: {
    self.ship.flyStraight()//retain self
})

经过几天谷歌搜索内存问题,最后我发现我在这个块中有一个自我保留。当我在块运行之前创建新场景时,不会调用 deinit 函数,因为块中的引用。

我必须在我的游戏中这样写,我能做些什么来避免这个问题。你用这样的代码做了什么?

4

1 回答 1

6

对于遇到相同问题的任何人。我将代码更改为:

ship.runAction(SKAction.waitForDuration(5), completion: {
        [unowned self] in
        self.ship.flyStraight()        
    })

在你的块中使用[unowned self] in不会添加对 self 的强引用。

感谢 Martin 的链接:“解决闭包的强参考循环”

你也可以看看这个问题

于 2015-01-26T06:13:14.327 回答