【问题标题】:How to remove SCNNode from the scene and free up memory in Xamarin iOS如何从场景中删除 SCNNode 并在 Xamarin iOS 中释放内存
【发布时间】:2019-01-23 14:43:49
【问题描述】:

RemoveFromParentNode() 仅从父节点/场景中删除节点,但不会将其从内存中删除,因为您仍然可以在执行该行后引用该节点。

我想知道我们如何才能从内存中完全删除节点,将节点设置为 null 对变量没有影响,如下面的代码所示。

我见过的大多数解决方案都在 swift 中,但我在 Xamarin.iOS C# 中找不到解决方案

var myNode = new SCNNode
{
    Name = "My Node"
};

SView.Scene.RootNode.Add(myNode);

SView.Scene.RootNode.EnumerateChildNodes((SCNNode node, out bool stop) =>
{
    node.RemoveFromParentNode();
    node = null; // Does nothing 

    stop = false;
});

try
{
    Debug.WriteLine(myNode.Name);
}
catch (NullReferenceException ex)
{
    Debug.WriteLine("We already deleted myNode" + ex.Message);
}

预计会遇到问题:“我们已经删除了 myNode”。

实际输出:“我的节点”

【问题讨论】:

    标签: c# xamarin memory-management scenekit arkit


    【解决方案1】:

    SCNode 是一个原生 ObjC 对象,顶部带有 .Net 包装器。当您分配它null 时,它只处理引用计数的 Xamarin.iOS/Mono 端。您需要在其上调用 Dispose 以释放这些原生引用。

    node.Dispose();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      相关资源
      最近更新 更多