我已经开始使用Instruments并且发现我的小型Scenekit游戏包含许多内存泄漏,一次最多100个。大多数泄露的对象是 SCNActionFade,SCNCActionFade,SCNActionMove,SCNCActionMove,SCNActionRepeat 和 SCNCActionRepeat。
我将讨论 SCNActionFade ,因为它是我代码中最简单的部分
/* Fade Out */
func fadeOut(node: SCNNode, duration: Double) {
let fadeOutAction = SCNAction.fadeOutWithDuration(duration)
node.runAction(fadeOutAction, completionHandler: { -> Void in
node.removeAllActions()
node.removeFromParentNode()
})
}
起初我认为问题出在-> Void in
部分,因此我将其更改为unowned in
和weak in
,但这并未停止保留周期。我在发布之前已对此进行过研究,但我很难过。
此外,仅当if语句为true时,才会在func renderer(renderer: SCNSceneRenderer, updateAtTime time: NSTimeInterval) {
内调用fadeOut。感谢。