这是我的代码:
ship.runAction(SKAction.waitForDuration(5), completion: {
self.ship.flyStraight()//retain self
})
经过几天谷歌搜索内存问题,最后我发现我在这个块中有一个自我保留。当我在块运行之前创建新场景时,不会调用 deinit 函数,因为块中的引用。
我必须在我的游戏中这样写,我能做些什么来避免这个问题。你用这样的代码做了什么?
这是我的代码:
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 的强引用。
感谢 Martin 的链接:“解决闭包的强参考循环”
你也可以看看这个问题