runblock 保留自引用导致内存释放问题

runblock retain self reference cause memory dealloc issue

这是我的代码:

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

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

我的游戏必须这样写,我该怎么做才能避免这个问题。你用这样的代码做了什么?

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

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

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

感谢马丁的 link: "Resolving Strong Reference Cycles for Closures"

你也可以看看this question