gpt4 book ai didi

actionscript-3 - 在 ActionScript 中将匿名函数用作事件处理程序-好还是不好?

转载 作者:行者123 更新时间:2023-12-04 06:42:47 24 4
gpt4 key购买 nike

我是从JS世界来到AS3的,我应该承认匿名功能是我的弱项。我倾向于在各处使用它们。现在,在进入AS3时,我已经在很多地方听到和阅读过,AS和Flash在处理垃圾收集方面非常糟糕,应该手动清空,处置和删除所有事件处理程序和对象,以避免奇怪的和无法解释的内存泄漏以及崩溃。不知道这部分内容是正确的,但是我想从一开始就遵循最佳实践。

所以我的问题是-将匿名函数用作事件处理程序的想法有多糟糕?例如考虑这样的代码:

addEventListener(Event.ENTER_FRAME, function() : void {
controls.elapsed = stream.time;
});

contorls.elapsed 是 setter ,除了设置视频播放器的当前播放时间之外,还更新整个UI,并且 是NetStream对象,用于流传输实际视频。

在很多其他地方,匿名功能可以使代码更简洁,更直观。检查以下代码以获取控制栏的简单淡入效果:
public function showControls() : void
{
var self:Controls = this;

if (!visible) {
visible = true;
fadeTimer = new Timer(30, 10);
fadeTimer.addEventListener(TimerEvent.TIMER, function() : void {
self.alpha += 0.1;
});
fadeTimer.addEventListener(TimerEvent.TIMER_COMPLETE, function() : void {
self.alpha = 1;
});
fadeTimer.start();
}
}

我完全喜欢它的外观并适合代码,但我担心泄漏。尽管Event.ENTER_FRAME处理程序以这种形式可能永远不会有害,但计时器监听器呢?我应该手动删除那些监听器,还是将它们设置为 fadeTimer = null 后会自动删除?是否可以完全删除具有匿名功能的监听器?

最佳答案

在可行的地方使用函数方法没有什么错。就内存泄漏而言,您需要将对象跟踪到舞台上以查看是否可以将其删除。

向控件中添加ENTER_FRAME事件处理程序可确保控件具有对匿名函数的引用。由于代码是控件的一部分(或出现在控件中),这很好,因为当控件处于控件中时,匿名函数将被删除。

向计时器添加事件处理程序可确保计时器具有对匿名函数的引用。如果计时器正在运行,它将使匿名函数引用保持 Activity 状态,并通过关联使enture控件保持 Activity 状态。但是,一旦计时器停止,则应同时收集计时器和功能。

如果其他所有方法均失败,请使用探查器并查看! ;)

关于actionscript-3 - 在 ActionScript 中将匿名函数用作事件处理程序-好还是不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4421060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com