Память приложения увеличилась после 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
}
}