Утечка памяти в SceneKit - PullRequest
       29

Утечка памяти в SceneKit

1 голос
/ 06 июля 2019

Память приложения увеличилась после segue до VC с scnView.Я использовал deinit и установил geometry на nil, но это не помогло.Я видел несколько советов по использованию deinit для решения этой проблемы, но у меня это не работает.Память увеличивается каждый раз, когда я возвращаюсь к этому ViewController с scnScene SceneKit: слишком много памяти сохраняется

var ship1: SCNNode!
    var ship2: SCNNode!
    var ship3: SCNNode!
    var ship4: SCNNode!
    let cameraNode = SCNNode()
    let lightNode = SCNNode()
    let ambientLightNode = SCNNode()

 class RecordVideoViewControllerWS: UIViewController {


    @IBOutlet weak var scnView: SCNView!

     override func viewDidLoad() {
            super.viewDidLoad()
          cameraNode.camera = SCNCamera()
                scnScene.rootNode.addChildNode(cameraNode)
                cameraNode.position = SCNVector3(x: 0, y: 0, z: 15)
                scnView.scene = scnScene

                lightNode.light = SCNLight()
                lightNode.light!.type = .omni
                lightNode.position = SCNVector3(x: 0, y: 10, z: 10)
                scnScene.rootNode.addChildNode(lightNode)

                // create and add an ambient light to the scene
                ambientLightNode.light = SCNLight()
                ambientLightNode.light!.type = .ambient
                ambientLightNode.light!.color = UIColor.darkGray
                scnScene.rootNode.addChildNode(ambientLightNode)
                 ship1 = nodeFromResource(assetName: "shipFolder/test0", extensionName: "scn")
                ship2 = nodeFromResource(assetName: "shipFolder/test1", extensionName: "scn")
                ship3 = nodeFromResource(assetName: "shipFolder/test2", extensionName: "scn")
                ship4 = nodeFromResource(assetName: "shipFolder/test3", extensionName: "scn")


                scnScene.rootNode.addChildNode(ship1)
                scnScene.rootNode.addChildNode(ship2)
                scnScene.rootNode.addChildNode(ship3)
                scnScene.rootNode.addChildNode(ship4)
    }



    override func viewWillDisappear(_ animated: Bool) {

                ship1.removeFromParentNode()
                ship1.geometry = nil

                ship2.removeFromParentNode()

                ship2.geometry = nil

                ship3.removeFromParentNode()

                ship3.geometry = nil

                ship4.removeFromParentNode()

                ship4.geometry = nil

                cameraNode.removeFromParentNode()
                cameraNode.geometry = nil
                lightNode.removeFromParentNode()
                lightNode.geometry = nil

                ambientLightNode.removeFromParentNode()
                ambientLightNode.geometry = nil



                }
 deinit {
        scnScene.rootNode.cleanup()
    }


}

    extension SCNNode {
        func cleanup() {
            for child in childNodes {
                child.cleanup()
            }
            geometry = nil
        }
    }
...