【问题标题】:scene kit memory management using swift使用 swift 的场景工具包内存管理
【发布时间】:2015-11-24 12:59:18
【问题描述】:

我很困惑如何使用 swift 释放场景工具包中的内存。每当我从 collada 文件创建 SCNNode 时,它​​都会导入几何图形,创建物理对象,并从 jpg 文件设置材质。由于某种原因(即使文件大小低于 300k),这在创建新对象时会占用 10 mb 的内存,但无论如何。每当它从父节点中删除时,零内存就会释放,我不明白为什么。我可以使用什么代码来真正删除对象?我找不到有关该主题的任何文档。这只是一个笼统的问题,所以这里不需要代码。

【问题讨论】:

  • 您使用的是最新的测试版吗?可能不相关,但是在测试版中尝试使用 Scene Kit 和非常轻的文件时,我遇到了各种内存警告。在使用时间线编辑器和 .scn 编辑器玩游戏时,它也会大量崩溃。我认为这是一个真正的测试版,测试版,也许还没有发布正确的版本。另外,在将文件分配给节点之前,您是否将文件分配给了变量/属性?而且,最后一件事,在 Swift 中有一个 uninitialise ......但对它了解不多。请记住在 WWDC 视频中看到它。
  • 这是最新版本。不是贝塔。 6.4 版。我会继续搜索,但您可以在网上找到的关于该主题的材料并不多。

标签: ios swift memory-management scenekit


【解决方案1】:

所以我发现我需要做的是将游戏对象上的纹理设置为 nil,然后再将它们从父对象中移除。作为一般规则,我在删除节点之前开始将所有纹理设置为 nil。无论如何,这解决了我的记忆问题。

【讨论】:

【解决方案2】:

如果节点对它有强引用,ARC 不会释放它。您可以将节点的声明切换为“弱”属性,也可以将对该节点的任何强引用设置为 nil。由于“强”和“弱”的不同行为,更改为弱修复。虽然对象具有强引用(简单的 var 或 let 自动为强),但即使您使用 removeFromParent 函数,它也不会被占用内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 2011-02-05
    • 2015-10-15
    • 2013-11-28
    • 2014-07-05
    • 1970-01-01
    相关资源
    最近更新 更多