当前位置 : 主页 > 手机开发 > ios >

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

来源:互联网 收集:自由互联 发布时间:2021-06-11
这是我的代码: ship.runAction(SKAction.waitForDuration(5), completion: { self.ship.flyStraight()//retain self}) 几天后谷歌搜索内存问题,最后我发现我有一个自我保留在这个块.当我在块运行之前创建新场景
这是我的代码:

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]将不会添加对self的强引用.

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

你也可以看看this question

网友评论