我很困扰。我一直认为只要在 C# 中至少有一个指向某个对象的链接,该对象就会一直存在,而完全销毁该对象的唯一方法是消除所有链接(通过将它们设置为null
或其他方式) , 并等待 GC 销毁它。
但是 Unity3D 的实验现在让我认为这种信念是不准确的,如代码所示:
GameObject objA = new GameObject();
Debug.Log("Is null: " + (objA == null));
GameObject.DestroyImmediate(objA);
Debug.Log("Now is null: " + (objA == null));
输出是两条消息:
Is null: False
Now is null: True
因此,只需调用一些神奇的方法DestroyImmediate
,我就可以摆脱我的对象,而且链接objA
会自动重置为null
!这怎么可能?你能想象里面是DestroyImmediate
什么吗?这完全可以在普通 C# 中完成,或者这是 Mono 和/或 Unity3D 的一些肮脏把戏?
更新:正如向我指出的那样,该实验实际上并不能证明该物体已被破坏。但这不是我主要关心的问题。我主要担心的是链接以某种方式无效。