私は非常に混乱しています。私は常に、C# にオブジェクトへのリンクが少なくとも 1 つある限り、オブジェクトは存在し続けると想定してきました。オブジェクトを完全に破棄する唯一の方法は、すべてのリンクを削除することです (それらをnull
または別のものに設定することによって)。 、GC がそれを破棄するのを待ちます。
しかし、Unity3D を使った実験の結果、次のコードが示すように、この信念は不正確であると考えるようになりました。
GameObject objA = new GameObject();
Debug.Log("Is null: " + (objA == null));
GameObject.DestroyImmediate(objA);
Debug.Log("Now is null: " + (objA == null));
出力は次の 2 つのメッセージです。
Is null: False
Now is null: True
したがって、魔法のメソッドDestroyImmediate
を呼び出すだけで、オブジェクトを取り除くことができ、さらに、リンクobjA
は自動的にnull
!にリセットされます。これはどのように世界であり得るのでしょうか?の中に何が入っているか想像できますDestroyImmediate
か? これは通常の C# で行うことができますか、それとも Mono や Unity3D の汚いトリックですか?
更新:私に指摘されたように、実験は実際にオブジェクトが破壊されたことを証明していません。しかし、それは私の主な関心事ではありません。私の主な懸念は、リンクが何らかの形で無効になったことです。