如果我有以下代码:
MyClass pClass = new MyClass();
pClass.MyEvent += MyFunction;
pClass = null;
pClass会被垃圾回收吗?或者,当事件发生时,它还会继续执行事件吗?为了允许垃圾收集,我需要执行以下操作吗?
MyClass pClass = new MyClass();
pClass.MyEvent += MyFunction;
pClass.MyEvent -= MyFunction;
pClass = null;
发布于 2008-11-18 09:49:24
是的,pClass
将被垃圾回收。事件订阅并不意味着存在对pClass
的任何引用。
因此,您不必分离处理程序,以便对pClass
进行垃圾回收。
发布于 2008-11-18 10:55:37
一旦一块内存不再被引用,它就成为垃圾回收的候选对象。当类的实例超出作用域时,程序将不再引用它。它不再使用,因此可以安全地收集。
如果你不确定是否会收集一些东西,问自己以下问题:是否仍然存在对它的引用?事件处理程序由对象实例引用,而不是由对象实例引用。
发布于 2012-06-07 21:31:52
pClass
将被垃圾回收。但是,如果上面的代码片段在另一个类中,如果您不将pClass
设置为null
,则可能不会清除该类的实例。
https://stackoverflow.com/questions/298261
复制相似问题