我使用了我创建的自定义(系统)EventHandler:
public event EventHandler<T> OnItemSelected;
然后我要分配一个自定义的匿名函数:
.OnItemSelected += (...) => {};
但是我很确定它不会自我清洁,当我的gameObject
被销毁时,这会导致内存泄漏。我该如何预防呢?我应该将EventHandler
替换为UnityEvent
并使用RemoveAllListeners
吗?
您不能!
Lambda表达式就像您所说的那样是匿名的,因此不能注销,因为您无法解决它们!
[如果您以后需要删除它们-不要使用lambda,而是使用显式方法,例如代替
OnItemSelected += (T) => { ... };
而是明确使用
private void HandleItemSelected(T value)
{
...
}
OnItemSelected += HandleItemSelected;
现在您也可以使用删除它
OnItemSelected -= HandleItemSelected;