2010-04-08 55 views
1

目前我正在使用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符合垃圾收集的條件?

回答

3

我想你應該明確地刪除監聽器。這至少可以讓大家更容易閱讀代碼。

我不確定你是否保留對hostController的任何其他引用(如你從hostController())得到的。 如果您沒有任何其他引用(例如,如果hostController()是一個簡單的「忘記生成工廠」),並且在這些偵聽器上使用弱引用,那意味着它甚至可以在垃圾收集完成之前工作 - 據我瞭解。