我使用了我创建的自定义(系统(事件处理程序:
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;
}