我有一个使用以下内容创建场景工具包纹理的应用程序:
let texture = SKTexture(image: image)
问题是在多次调用之后,应用程序因内存不足而崩溃。
我真的只需要最近创建的纹理,因此在创建新纹理时,可以释放预览的内存,但是,即使不再使用这些纹理,Scene Kit似乎也会保留这些纹理(节点不再是场景的一部分。)
如何手动告诉Scene Kit释放纹理的内存和缓存,以便我不会陷入低内存崩溃的情况?
另外,我知道SceneKit文档建议通过删除节点等删除对纹理的所有引用,但这应该发生,但纹理没有被释放。是否有一种很好的调试方法,可以看到持有什么内容?
在重新审视代码时,我正在创建一个场景来保存要在主场景中渲染的图像(其节点不会改变)。基本上,场景中有一个对象可以显示图像或视频,并通过返回一个用作材质漫反射内容的场景来更改。
let texture = SKTexture(image: image)
let sprite = SKSpriteNode(texture: texture)
let scene = SKScene(size: sprite.size)
sprite.position = CGPointMake(CGRectGetMidX(scene.frame), CGRectGetMidY(scene.frame));
scene.addChild(sprite)
然后在这里使用:
primaryObjectMaterial.diffuse.contents = scene
我希望一旦场景的节点素材内容发生变化,这个场景(以及纹理和图像)就会被释放,因为不再有任何对它的引用,但也许缓存系统挂在某物上或者我是做错了什么?
答案 0 :(得分:0)
很难在没有看到您的代码或知道应用程序如何工作的情况下给您一个确切的答案,但您需要获取纹理所在的节点并将其删除
nameOfNode.removeFromParentNode
这会将其从内存中删除,您需要添加一个带有新纹理的新节点。