RemoveFromParentNode()仅从父节点/场景中删除该节点,但不会从内存中删除它,因为在执行该行之后您仍然可以引用该节点。
我想知道如何从内存中完全删除该节点,将节点设置为null对变量没有影响,如下面的代码所示。
我见过的大多数解决方案都很快,但是在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”。
实际输出:“我的节点”
答案 0 :(得分:1)
SCNode
是一个本地ObjC对象,顶部带有.Net包装器。分配null
时,这仅是参考计数的Xamarin.iOS / Mono端。您需要对其调用Dispose
才能释放这些本机引用。
node.Dispose();