【问题标题】:In proxy should I remove listeners explicitly?在代理中,我应该明确删除侦听器吗?
【发布时间】:2010-04-08 19:14:13
【问题描述】:

目前我正在开发 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 有资格进行垃圾收集?

【问题讨论】:

    标签: apache-flex actionscript-3 architecture puremvc


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多