Unity :使用 UnityEvent 处理自定义事件处理程序的注销



我使用了我创建的自定义(系统(事件处理程序:

public event EventHandler<T> OnItemSelected;

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

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

但是我很确定它没有自行清洁,当我的gameObject被破坏时,这会导致内存泄漏。 我怎样才能防止这种情况?我应该用UnityEvent替换我的EventHandler并使用RemoveAllListeners吗?

你不能!

正如您所说,Lambda 表达式是匿名的,因此无法取消注册,因为您无法解决它们!

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

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

而是明确使用

private void HandleItemSelected(T value)
{
...
}
OnItemSelected += HandleItemSelected;

现在您也可以使用

private void OnDestroy()
{
OnItemSelected -= HandleItemSelected;
}

最新更新