Unity:使用UnityEvent处理自定义EventHandler的未注册[duplicate]

问题描述 投票:3回答:1

我使用了我创建的自定义(系统)EventHandler:

public event EventHandler<T> OnItemSelected;

然后我要分配一个自定义的匿名函数:

.OnItemSelected += (...) => {};

但是我很确定它不会自我清洁,当我的gameObject被销毁时,这会导致内存泄漏。我该如何预防呢?我应该将EventHandler替换为UnityEvent并使用RemoveAllListeners吗?

c# unity3d
1个回答
1
投票

您不能!

Lambda表达式就像您所说的那样是匿名的,因此不能注销,因为您无法解决它们!

[如果您以后需要删除它们-不要使用lambda,而是使用显式方法,例如代替

OnItemSelected += (T) => { ... };

而是明确使用

private void HandleItemSelected(T value)
{
    ...
}

OnItemSelected += HandleItemSelected;

现在您也可以使用删除它

OnItemSelected -= HandleItemSelected;
© www.soinside.com 2019 - 2024. All rights reserved.