Ios SCNAction.removeFromParentNode和deinit未调用

Ios SCNAction.removeFromParentNode和deinit未调用,ios,swift,memory,scenekit,deinit,Ios,Swift,Memory,Scenekit,Deinit,下面的方法是在GKComponent的类扩展中定义的 weak var node:SCNNode? 最后一个操作是SCNAction.removeFromParentNode(),在moveAction之后执行 该节点已从图形场景中正确删除,但未调用相关节点的deinit,并且我无法释放内存 但是,如果我从序列中删除moveAction,就会调用deinit。这是一只虫子 func moveAlongNorthSouth(){ 让sequence=SCNAction.sequence([SC

下面的方法是在GKComponent的类扩展中定义的

weak var node:SCNNode?

最后一个操作是
SCNAction.removeFromParentNode()
,在moveAction之后执行

该节点已从图形场景中正确删除,但未调用相关节点的deinit,并且我无法释放内存

但是,如果我从序列中删除moveAction,就会调用deinit。这是一只虫子

func moveAlongNorthSouth(){
让sequence=SCNAction.sequence([SCNAction.removeFromParentNode()]))
self.node!.runAction(序列)

}

我很惊讶,您发布的第二个示例中调用了Denit,因为我希望通过
self.node
维护一个引用(防止Denit),这当然可能是一个弱引用。如果在运行操作后设置
self.node=nil
,该怎么办?是的,节点被定义为弱引用:弱var节点:SCNNode?我进行了更多调查,发现了以下行为。如果我将moveAction的持续时间设置为0.1秒,则会调用deinit方法!!!!!这很难解释。可能值得向苹果公司提交一份bug报告。
 func moveAlongNorthSouth() {
       let moveAction = SCNAction.moveByX(0, y: 0, z: 1, duration: NSTimeInterval(2))
       let sequence = SCNAction.sequence([moveAction,SCNAction.removeFromParentNode()])
       self.node!.runAction(sequence)
   }