• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - Xcode 任意 3D 引擎不断缓慢增加内存

[复制链接]
菜鸟教程小白 发表于 2022-12-11 18:08:28 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

我最近开始使用场景工具包,每次我使用 SCNAction.repeatForever 为任何节点设置动画或使用渲染循环更新旋转或位置时,调试 session 中都会显示内存缓慢逐渐增加。这甚至发生在苹果提供的基础项目中,它就像喷气式飞机旋转一样简单,但内存每 5-10 秒持续增加约 0.1 mb。我让它运行了半个多小时,它还在不断增加。我也试过停止动画并且内存没有被释放。我试过使用多个设备并打开 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)
    }

有没有其他人注意到这个问题?我能做些什么吗?非常感谢任何想法、建议或意见!

编辑: 我注意到: 如果我不使用 Actions 而不是使用更新功能的路线。 只要我在代码中有这一行:

self.scnView.isPlaying = true

即使我不更改场景中的任何内容,甚至在我添加任何其他代码(例如设置委托(delegate)或添加更新函数(func 渲染器)之前),内存也会增加。

我会进一步研究这个问题,如果我让它在不增加内存的情况下工作,我会发布更新,我还向苹果提交了一份关于他们的基础项目在你构建和运行它时自动增加内存的错误报告。

编辑: 如果走使用 OverlaySKScene 的路线,并使用那里的更新功能来更新立方体的位置,内存就会上升,那就是没有设置

self.scnView.isPlaying = true

即使在立方体离开相机后,内存仍然会增加。

结论: 任何时候更新场景内存中的节点都会增加。

怎么办?



Best Answer-推荐答案


是的。我经历了完全相同的事情,并且能够得出与您完全相同的结论: SCNAction.repeatForever() “吃掉”内存。
可能是向 Apple 提交错误?

其他 SCNActions 似乎也有问题......(我必须对此进行调查) 我还没有解决方案。我试图用 CABasicAnimation() 替换 SCNActions - 这导致了完全相同的问题(旋转消耗内存):

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

关于ios - Xcode 任意 3D 引擎不断缓慢增加内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40799067/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap