Bonjour im très nouveau dans le travail avec SceneKit et ARKit alors c'est peut-être une question fondamentale. Dans mon application ARKit, j'essaie de tirer des roquettes continuellement d'un point à un autre. Par conséquent, j'ai écrit cette fonction:removeFromParentNode ne libère pas de mémoire dans ARKit Application
@objc func shootRocket() {
guard let cameraTransform = session.currentFrame?.camera.transform else {
return
}
let rocket = VirtualObject(definition: VirtualObjectManager.availableObjects[VirtualObjectManager.availableObjects.count - 1])
let rocket_pos = float3(x: position.x, y: position.y+0.144, z: position.z-0.66)
virtualObjectManager.loadVirtualObject(rocket, to: rocket_pos, cameraTransform: cameraTransform)
if rocket.parent == nil {
serialQueue.async {
self.sceneView.scene.rootNode.addChildNode(rocket)
let moveaction = SCNAction.move(by: SCNVector3(0,0,-10), duration: 5)
rocket.runAction(moveaction) {
rocket.removeAllActions()
rocket.removeAllAnimations()
rocket.removeFromParentNode()
}
}
}
}
Et j'appelle cette fonction comme ceci:
if object.parent == nil {
serialQueue.async {
self.sceneView.scene.rootNode.addChildNode(object)
}
let timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(self.shootRocket), userInfo: nil, repeats: true)
...
}
Tout fonctionne, sauf que mon utilisation de la mémoire devient de plus en plus après chaque coup de feu et après quelques tire les accidents de l'application.
Je pense que la fonction removeFromParentNode() libère de la mémoire lorsqu'elle est appelée, mais elle ne ressemble pas.
Alors, quel est le problème ici?