在许多必须订阅编辑器回调的Unity代码示例中,您经常遇到以下模式:
Undo.postprocessModifications -= OnPostprocessModifications;
Undo.postprocessModifications += OnPostprocessModifications;
// then, later, in some other method
Undo.postprocessModifications -= OnPostprocessModifications;
我曾经在EditorWindow
内执行以下操作:
void OnEnable()
{
Undo.postprocessModifications += OnPostprocessModifications;
}
void OnDisable()
{
Undo.postprocessModifications -= OnPostprocessModifications;
}
问题:
在代表组合模式之前删除代表的确切含义是什么?
仅是为了确保额外的安全性还是有其他好处?
答案 0 :(得分:1)
这是没有用的,并且肯定不是“模式”,首先,它是在您只有一个委托实例订阅该事件的前提下起作用的,如果您-=
进行了预订,那么将没有任何实例但是如果以某种方式订阅了2个实例,那么-=
仍然保留了另一个实例,而您执行+=
之后,它们又回到了2。
如果-=
然后+=
对此有所帮助,它表明您正在失去对事件或程序流的跟踪/控制,并且仍然试图控制它失败。
如果为所有侦听器正确维护了+=
启用和-=
禁用的方法,那么您永远不必使用该“模式”。
答案 1 :(得分:0)
我想我已经找到了为什么他们使用这种模式:
Unity具有ON ERROR RESUME NEXT
的行为,也就是说,即使发生异常,代码仍会继续。
这样做会阻止堆积回调,并因此导致怪异的代码行为。