我有一个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); }
Christian Nu.. 9
当你不再需要它时,明确地删除你的听众总是一个好主意,是的,你做的方式很好.它可能看起来有点冗长,但它仍然是一种很好的练习,它会让你养成知道听众所在的习惯,因为不会经常知道导致泄漏和意外行为.
至于useWeakReference,除了删除不需要的监听器之外,我几乎总是自己使用它.对我来说,它成为规则而不是例外.但是,如果必须选择一个,请明确删除您的侦听器.就个人而言,我同时做到了.
事实上,我已经找到了最好将useWeakReference留给false的次数,因为这样做会阻止对象被垃圾收集,这种情况尤为罕见.事实上,在我了解了这个论点之前(博客文章),在获得运行时异常源于Flex框架调用组件之后,我花了很多时间试着调用我确定已从显示列表中删除的组件.
去年的MAX会议上,Deepa Subramaniam在她的组件模型演讲中提到了这一点(一个非常值得一试的优秀演讲); 我相信她说的方式是这样的,"我不知道为什么Flash播放器团队选择将默认设置为默认而不是真实,但99%的情况下,你会想要将该值设置为真正."
当你不再需要它时,明确地删除你的听众总是一个好主意,是的,你做的方式很好.它可能看起来有点冗长,但它仍然是一种很好的练习,它会让你养成知道听众所在的习惯,因为不会经常知道导致泄漏和意外行为.
至于useWeakReference,除了删除不需要的监听器之外,我几乎总是自己使用它.对我来说,它成为规则而不是例外.但是,如果必须选择一个,请明确删除您的侦听器.就个人而言,我同时做到了.
事实上,我已经找到了最好将useWeakReference留给false的次数,因为这样做会阻止对象被垃圾收集,这种情况尤为罕见.事实上,在我了解了这个论点之前(博客文章),在获得运行时异常源于Flex框架调用组件之后,我花了很多时间试着调用我确定已从显示列表中删除的组件.
去年的MAX会议上,Deepa Subramaniam在她的组件模型演讲中提到了这一点(一个非常值得一试的优秀演讲); 我相信她说的方式是这样的,"我不知道为什么Flash播放器团队选择将默认设置为默认而不是真实,但99%的情况下,你会想要将该值设置为真正."