在代理中我应该明确删除侦听器吗?

时间:2010-04-08 19:14:13

标签: flex actionscript-3 architecture puremvc

目前我正在使用flex应用程序,我正在使用puremvc的多核变体。我的问题是在我的代理中我正在进行远程调用并附加一些(RESULT和FAULT)事件监听器。因此,在我的事件处理程序代码中,我应该显式删除侦听器,以使remoteObject类符合垃圾收集器的条件吗?

   public function getTableGridData():void
   {
      var hostController:RemoteObject=this.hostController("ABC");
      hostController.addEventListener(ResultEvent.RESULT, handleResult);
      hostController.addEventListener(FaultEvent.FAULT, handleFault);
      hostController.getTableData();
   }

   private function handleResult(event:ResultEvent):void
   {
      ApplicationFacade.getInstance(key).sendNotification("abc", event.result);
   }

所以这里的hostController拥有两个侦听器的强引用。所以在resultEvent之后,hostController是否有资格进行垃圾收集,或者我必须提到监听器的弱引用,以使hostController有资格进行垃圾收集?

1 个答案:

答案 0 :(得分:3)

我认为您应该明确删除侦听器。 它至少可以让每个人都更容易阅读代码。

我不确定你是否保留对该hostController的任何其他引用(因为你从 hostController()获得它)。 如果您没有任何其他引用(例如,如果 hostController()是一个简单的create-forget工厂)并在这些侦听器上使用弱引用,那么这意味着它甚至可以用于垃圾收集它完成了它的工作 - 据我所知。