首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >事件处理程序是否会阻止垃圾收集的发生?

事件处理程序是否会阻止垃圾收集的发生?
EN

Stack Overflow用户
提问于 2008-11-18 09:35:33
回答 3查看 30.7K关注 0票数 193

如果我有以下代码:

代码语言:javascript
复制
MyClass pClass = new MyClass();
pClass.MyEvent += MyFunction;
pClass = null;

pClass会被垃圾回收吗?或者,当事件发生时,它还会继续执行事件吗?为了允许垃圾收集,我需要执行以下操作吗?

代码语言:javascript
复制
MyClass pClass = new MyClass();
pClass.MyEvent += MyFunction;
pClass.MyEvent -= MyFunction;
pClass = null;
EN

回答 3

Stack Overflow用户

发布于 2008-11-18 09:49:24

是的,pClass将被垃圾回收。事件订阅并不意味着存在对pClass的任何引用。

因此,您不必分离处理程序,以便对pClass进行垃圾回收。

票数 9
EN

Stack Overflow用户

发布于 2008-11-18 10:55:37

一旦一块内存不再被引用,它就成为垃圾回收的候选对象。当类的实例超出作用域时,程序将不再引用它。它不再使用,因此可以安全地收集。

如果你不确定是否会收集一些东西,问自己以下问题:是否仍然存在对它的引用?事件处理程序由对象实例引用,而不是由对象实例引用。

票数 8
EN

Stack Overflow用户

发布于 2012-06-07 21:31:52

pClass将被垃圾回收。但是,如果上面的代码片段在另一个类中,如果您不将pClass设置为null,则可能不会清除该类的实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/298261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档