apache-flex - 弹性/AS3 : When to remove listeners?

标签 apache-flex actionscript-3

我有一个 FileReference 对象数组,每个对象都有几个监听器,我应该在它的处理程序方法中删除每个监听器,还是应该在完整的处理程序中将它们全部删除?

我在某处读到为听众使用弱引用,但我认为明确删除听众会更好(是?/否?)

for each(var f:Object in fileCollection){
   var myFile:FileReference = f.file; 
   myFile.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, onUploadCompleteData)
   myFile.addEventListener(ProgressEvent.PROGRESS, onProgress);
   myFile.addEventListener(IOErrorEvent.IO_ERROR, onError);
   myFile.addEventListener(Event.COMPLETE, onComplete);
 }

 private function onUploadCompleteData(e:DataEvent):void{
   // doin my thing here
   removeListeners(e)
 }

 private function removeListeners(e:Event):void{
   var myFile:FileReference = FileReference(e.target)
   myFile.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA, onUploadCompleteData)
   myFile.removeEventListener(ProgressEvent.PROGRESS, onProgress);
   myFile.removeEventListener(IOErrorEvent.IO_ERROR, onError);
   myFile.removeEventListener(Event.COMPLETE, onComplete);
 }

最佳答案

当你不再需要它们时,明确地删除你的听众总是一个好主意,是的,你这样做的方式很好。这可能看起来有点冗长,但它仍然是一个很好的做法,它让您养成知道听众在哪里的习惯,因为不知道经常会导致泄漏和意外行为。

至于 useWeakReference,除了移除不需要的监听器之外,我几乎总是自己使用它。对我来说,它已成为规则而不是异常(exception)。但是,如果您必须选择一个,请明确删除您的听众。不过,就我个人而言,我两者都做。

事实上,我发现最好将 useWeakReference 设为 false 的次数特别少,因为这样做会阻止对象被垃圾回收。确实,在我了解该参数的用途之前 ( blog post here ),在获取源自 Flex 框架调用组件的运行时异常后,我花了大量时间挠头,我确信我已从显示列表中删除。

Deepa Subramaniam 在 her component-model talk 中斜着提到了它在去年的 MAX session 上(非常值得一看的精彩演讲);我相信她的说法类似于,“我不知道为什么 Flash 播放器团队选择将 false 作为默认值而不是 true,但是在 99% 的情况下,您会想要将该值设置为真的。”

关于apache-flex - 弹性/AS3 : When to remove listeners?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/476813/

相关文章:

apache-flex - 是否可以停止 ColdFusion 请求?

apache-flex - 如何获取 TextArea 组件内插入符号的 X、Y 坐标?

javascript - 哪个版本的 IE 使用 window[objectName] 而不是 window.document[objectName]?

apache-flex - 如何从匿名组件中删除事件监听器?

apache-flex - 在 Flash Player 中播放来自 ByteArray 的 FLV

java - 如何在 Action Script 中将二进制内容发送到 servlet

ios - AS3 iOS 防止 "animated"方向改变

actionscript-3 - 场景图形/显示列表之外的 AS3 事件冒泡

actionscript-3 - AS3 |从 URL 加载图像并开始拖动问题

ruby-on-rails - 从 Rails 到 Flex 的日期/时间转换问题?