Flash垃圾收集器和处理事件

发布于 2025-01-07 05:46:59 字数 289 浏览 0 评论 0原文

看看下面的代码,

var a = new View();
a = null;
....
class View {
    private var clip: MovieCLip

    public function View() {
        clip.addEventListener(...)
    }
}

aa = null之后会在内存中吗? addEventListener 是否添加了强引用?

take a look at the following code

var a = new View();
a = null;
....
class View {
    private var clip: MovieCLip

    public function View() {
        clip.addEventListener(...)
    }
}

will a be in memory after a = null? Does addEventListener adds a strong refernce?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

怎会甘心 2025-01-14 05:46:59

默认情况下,addEventListener 添加强引用。 addEventListener 的最后一个参数useWeakReference。您可以对此参数使用 true 来指定弱引用。

By default addEventListener adds a strong reference. The last parameter of addEventListener is useWeakReference. You can use true for this parameter to specify a weak reference.

静谧幽蓝 2025-01-14 05:46:59

正如您所描述的示例一样,附加事件侦听器的对象将不会被垃圾收集。即使设置为 null 也无济于事。

要获取此对象 goto gc(),您可以使用以下方法之一:

  1. useWeakReference

    clip.addEventListener(EVENT.name,listenerMethod,false,0,true);

  2. 取消订阅侦听器。

在处理程序方法中

function handlerMethod(ev:Event):void
{
  clip.removeEventListener(EVENT.name,listenerMethod);
}

As you describe your example, the object where the event listener is attached will not be garbage collected. Even setting null will not help.

TO get this object goto gc() you can use one of the following approaches:

  1. useWeakReference

    clip.addEventListener(EVENT.name,listenerMethod,false,0,true);

  2. unsubscribe listener.

In handler method

function handlerMethod(ev:Event):void
{
  clip.removeEventListener(EVENT.name,listenerMethod);
}
中性美 2025-01-14 05:46:59

由于对 clip 的所有引用都在 a 内,GC 将拾取这两个对象并彻底删除它们。

我采用了您的示例,并使用 ENTER_FRAME 侦听器以与您相同的方式创建新的 View

图形对象未添加到舞台

但是,如果剪辑被添加到舞台,那么它将继续存在,并且 a 也不会被删除:

添加到舞台的对象的图表

您可以使用 addEventListeneruseWeakReference 参数> 以防止这种情况发生。

Since all the references to clip are within a, GC will pick up both objects and cleanly remove them.

I've taken your example and used an ENTER_FRAME listener to create new Views in the same way you did:

Graph object not added to the stage

If, however, clip were added to the stage, then it would continue to exist, and a would also not be removed:

Graph for objects added to the stage

You can use the useWeakReference parameter of addEventListener to prevent this from happening.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文