只是虚弱和无主的自我?

时间:2019-01-29 15:42:38

标签: swift weak-references retain-cycle

我遇到了一些内存泄漏,这些泄漏似乎与闭包捕获变量有关,而不一定是代码中众所周知的“自我保持周期”。我的问题尤其与SKAction运行块有关,例如

let initialBlock = SKAction.run {
    [unowned self] in

    emitter.position = self.circlesLayer.convert(circle.currentPosition, to: self)
    emitter.zPosition = 150
    emitter.isPaused = true
    self.addChild(emitter)
}

随后将其用作:

run(SKAction.sequence([SKAction.wait(forDuration: 0.25), initialBlock, emitterStart, SKAction.wait(forDuration: 1.0), emitterStop]))

在这里,我在短暂的延迟后添加了一个发射器,将其取消暂停(emitterStart),等待,然后将其删除(emitterStop)。

为了进一步详细说明,发射器声明为:

let emitter = Assets.sharedInstance.getEmitter(.specialcircleexplosion)

其中Assets是一个单例,它会吸引特定的目标发射器,因为我将它们预加载到游戏场景中。

为了进一步阐述(对不起),circle也是另一个类的实例。我还应该考虑[无名社交圈]吗?

SKAction运行块中是否有任何理由要[弱发射者]或[未拥有的圈子]以及[弱自我]或[未拥有的自我]?这有点双重含义,但从更笼统的意义上讲:除了经典的弱自我案例之外,我是否应该继续观察保留周期?


一些额外的内存图信息,正如我在下面对Rob的评论中所提到的:

retain cycle shown here

这是臭名昭著的闭包#3,但是:

gameScene.animateMatchedCircles() {
    [weak self] in self?.animateMatchedCirclesCompletion()
}

0 个答案:

没有答案
相关问题