removing SCNNode does not free memory before creating new SCNNode

I am building an app that uses Scenekit to display a scene based on information returned from a data base. I have created a custom class with a class func that creates a SCNNode containing everything that needs to be drawn and returns it to my SCNView. Before calling this function I remove any existing nodes. Everything works great until I need to call it a second time. After removing the old SCNNode The memory is not deallocated before creating the new one. Is there a standard way of removing and replacing an SCNNode without overloading memory? I’m new to iOS dev and have never really done graphics before either. Thanks

  • Getting the screen location of a cell from a UICollectionView
  • iOS 8 move UIView up when keyboard appears | Issue
  • Application sticks on OSSpinLockLockSlow
  • What exactly does bool parameter do in animateWithDuration:animations:completion:
  • Passing data between View Controllers using Segue
  • Good way to calculate 'brightness' of UIImage?
  • Solutions Collect From Internet About “removing SCNNode does not free memory before creating new SCNNode”

    I had the same problem, with my SceneKit app leaking a lot of memory. The memory of the SCNNode is freed if you set its geometry property to nil before letting Swift deinitialize it.

    Here is an example of how you may implement it:

    class ViewController: UIViewController {
        @IBOutlet weak var sceneView: SCNView!
        var scene: SCNScene!
    
        // ...
    
        override func viewDidLoad() {
            super.viewDidLoad()
            scene = SCNScene()
            sceneView.scene = scene
    
            // ...
        }
    
        deinit {
            scene.rootNode.cleanup()
        }
    
        // ...
    }
    
    extension SCNNode {
        func cleanup() {
            for child in childNodes {
                child.cleanup()
            }
            geometry = nil
        }
    }