C# 我应该在销毁游戏对象时清空字段吗?
如果一个字段是通过Inspector设置的,我应该在销毁游戏对象时将其置空,还是Unity会自动将其置空C# 我应该在销毁游戏对象时清空字段吗?,c#,unity3d,memory-management,C#,Unity3d,Memory Management,如果一个字段是通过Inspector设置的,我应该在销毁游戏对象时将其置空,还是Unity会自动将其置空 public class TestClass : MonoBehaviour { public Image Icon; public Button CloseButton; private void Start() { Icon.color = Color.black; CloseButton.onClick.AddListe
public class TestClass : MonoBehaviour
{
public Image Icon;
public Button CloseButton;
private void Start()
{
Icon.color = Color.black;
CloseButton.onClick.AddListener( MyButtonListener );
}
private void OnDestroy()
{
CloseButton.onClick.RemoveListener( MyButtonListener );
//DO I NEED THIS?
Icon = null;
CloseButton = null;
}
private void MyButtonListener() { }
}
如果一个字段是通过Inspector设置的,我应该在销毁时将其置空吗
游戏对象或Unity会自动做到这一点吗
不,您不必在销毁Unity对象之前或之后将其设置为null
。Unity的对象有一个=
操作符重载。当对象被销毁时,Unity将该对象标记为null
,但该对象不是真正的null
。这是一种实现的机制,您可以使用if(unityObject==null)
检查它是否为null
。当它被标记为null时,再次将其设置为null是没有意义的
请注意,当您说destroy时,我假设您正在使用or函数销毁对象。此外,如果您只是像在问题中那样取消订阅活动,则不需要销毁对象。您也不需要将其设置为null
如果一个字段是通过Inspector设置的,我应该在销毁时将其置空吗
游戏对象或Unity会自动做到这一点吗
不,您不必在销毁Unity对象之前或之后将其设置为null
。Unity的对象有一个=
操作符重载。当对象被销毁时,Unity将该对象标记为null
,但该对象不是真正的null
。这是一种实现的机制,您可以使用if(unityObject==null)
检查它是否为null
。当它被标记为null时,再次将其设置为null是没有意义的
请注意,当您说destroy时,我假设您正在使用or函数销毁对象。此外,如果您只是像在问题中那样取消订阅活动,则不需要销毁对象。您也不需要将其设置为
null
执行其中任何一种类型(Image
/按钮
)实现IDisposable
?执行其中任何一种类型(Image
/按钮
)实现IDisposable
?谢谢!是的,我通过调用Destroy
函数来销毁对象。希望确保所有引用都为null,以便GC可以正确地释放内存。虽然Unity在内部区分未设置的引用和已销毁的对象引用,但程序员说它覆盖了==运算符,因此从代码角度来看结果是相同的谢谢!是的,我通过调用Destroy
函数来销毁对象。希望确保所有引用都为null,以便GC可以正确地释放内存。虽然Unity在内部区分未设置的引用和已销毁的对象引用,但程序员说它覆盖了==运算符,因此从代码的角度来看,结果是相同的