我被委托清理代码中的内存泄漏,并进行检查以防止进一步的泄漏。我注意到未分离的处理程序似乎是主要原因。大多数都是直截了当的,但是代码中有几件事让我摸不着头脑。
第一的:
myObject.someEvent -= null;
我假设这完全没有任何作用是正确的吗?(我知道如果一个事件是本地的,你可以将它设置为 null,因为它本质上是一个多播委托)。
其次,对于匿名处理程序:
myObject.someEvent += ()=> { x + y; };
myObject.someEvent -= ()=> { x + y; };
我是否正确地说第二条指令也毫无价值,因为匿名方法将被编译为两个单独的委托,因此减法实际上并不指向需要删除的正确处理程序?(对于正在寻找解决此问题的适当解决方案的任何人,请看这里)。
我不想满足于“是的,没错”,我想知道为什么这些东西不起作用(假设我的断言是正确的)。