XCODE任何3D发动机恒定记忆的恒定增加



编辑:我以为也许只是场景,但后来我为OpenGL和Metal制作了一个新的Xcode项目,这两个引擎都与Scenekit相同,内存慢慢增加。有人可以告诉我这是怎么回事吗?正常吗?为什么?

我最近开始使用场景套件,每次我用scnaction对任何节点进行动画作用。重新播放或更新旋转或渲染循环的位置时,调试会话中显示的内存逐渐增加。这甚至发生在Apple提供的基本项目中,这是一个简单的过程,因为射流旋转,但记忆的增加约为每5-10秒的0.1 MB。我让它运行半小时以上,它不断增加。香港专业教育学院还尝试停止动画,并且内存不会被释放。IVE尝试使用多个设备并转动scnView.showsStatistics = false

从我所看到的,导致问题的代码是:

self.cubeNode.runAction(SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: 0.01, z: 0, duration: 1.0/60.0)))

func renderer(_ aRenderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
        rot += 0.01
        self.cubeNode.eulerAngles = SCNVector3Make(rot, 0, 0)
    }

还有其他人注意到这个问题吗?我可以做任何事情吗?任何想法,建议或意见都将受到极大的赞赏!

编辑:我注意到:如果我不使用操作,而是走更新功能的路由。一旦我在代码中有此行:

self.scnView.isPlaying = true

即使我不更改场景中的任何内容,甚至在添加其他任何代码之前,例如设置代表或添加更新功能(Func Renderer),内存就上升了。

我将进一步研究此问题,如果我在没有内存增加的情况下使其正常工作,我还会向Apple提交了一份错误报告有关其基本项目的基本项目,将在您构建和运行时自动增加内存。p>编辑:如果使用使用Overlayskscene并使用更新功能来更新立方体的位置,则内存会上升,这是没有设置

self.scnView.isPlaying = true

即使多维数据集不在相机之外,内存仍然上升。

结论:每当在场景内存中更新节点时。

该怎么办?

是。我经历了完全相同的经历,并且能够将其钉在与您完全相同的结论中: scnaction.repeatforever()"吃"记忆。
可能是向Apple提出错误?

其他人似乎也有问题...(我必须调查)我还没有解决方案。我试图用cabasicanimation替换scnactions() - 这导致了完全相同的问题(旋转饮食记忆):

let rot = CABasicAnimation(keyPath: "eulerAngles.z")
rot.byValue = r
rot.duration = time
rot.repeatCount = .infinity
self.addAnimation(rot, forKey: "rotendless")

显然苹果知道这一点,他们将在10.2

中修复它

https://forums.developer.apple.com/thread/64295

https://forums.developer.apple.com/thread/67384

编辑:Apple已在最新的Xcode build中修复了这一点。

最新更新