Ios SCNAction.removeFromParentNode和deinit未调用
下面的方法是在GKComponent的类扩展中定义的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
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)
}