Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该在销毁游戏对象时清空字段吗?_C#_Unity3d_Memory Management - Fatal编程技术网

C# 我应该在销毁游戏对象时清空字段吗?

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

如果一个字段是通过Inspector设置的,我应该在销毁游戏对象时将其置空,还是Unity会自动将其置空

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在内部区分未设置的引用和已销毁的对象引用,但程序员说它覆盖了==运算符,因此从代码的角度来看,结果是相同的