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

时间:2015-01-25 17:24:21

标签: ios swift sprite-kit skaction retain-cycle

这是我的代码:

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

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

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

1 个答案:

答案 0 :(得分:7)

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

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

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

感谢Martin的链接: "Resolving Strong Reference Cycles for Closures"

您还可以查看this question