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

前端之家收集整理的这篇文章主要介绍了Flex / AS3:何时删除侦听器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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%的情况下,你会想要将该值设置为真正.”

原文链接:https://www.f2er.com/flex/174266.html

猜你在找的Flex相关文章