加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex / AS3:何时删除侦听器?

发布时间:2020-12-15 02:14:07 所属栏目:百科 来源:网络整理
导读:我有一个FileReference对象数组,每个对象都附加了几个侦听器,我应该删除它的处理程序方法中的每个侦听器,还是应该在完整的处理程序中删除它们? 我在某处读取了对侦听器使用弱引用,但我认为最好显式删除侦听器(是吗?/不?) for each(var f:Object in fileCo
我有一个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,除了删除不需要的监听器之外,我几乎总是自己使用它.对我而言,它成为规则而不是例外.但是,如果必须选择一个,请明确删除您的侦听器.就个人而言,我同时做到了.

事实上,我已经找到了最好将useWeakReference留下错误的次数,因为这样做会阻止对象被垃圾收集,这种情况尤为罕见.实际上,在我了解了这个论点(blog post here)之前,我花了很多时间在获得运行时异常源于Flex框架后调用组件,我确信我已从显示列表中删除了.

去年的MAX会议上,Deepa Subramaniam在her component-model talk年倾向于提到它(这是一个值得一试的优秀演讲);我相信她所说的方式就像是,“我不知道为什么Flash播放器团队选择将默认设置为默认而不是真实,但99%的情况下,你会想要将该值设置为真正.”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读