Em proxy, devo remover os ouvintes explicitamente?
-
25-09-2019 - |
Pergunta
Atualmente, estou trabalhando no aplicativo Flex, onde estou usando a variante multicore do PureMVC. Minha pergunta está no meu proxy, estou fazendo uma chamada remota e anexando algum ouvinte de evento (resultado e falha). Então, no meu código de manipulador de eventos, devo remover os ouvintes explicitamente para tornar a classe RemoteObject elegível para o lixo Collecton?
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);
}
Então, aqui o HostController mantém uma forte referência de ambos os ouvintes. Então, após o resultado, o HostController é elegível para a coleta de lixo ou eu tenho que mencionar a fraca referência para os ouvintes para tornar o HostController elegível para o lixo colecionador?
Solução
Eu acho que você deveria remover os ouvintes explicitamente. Seria pelo menos mais fácil para todos ler o código.
Não tenho certeza se você mantém outras referências a esse hostcontroller (como você conseguiu hostcontroller ()). Se você não tem outras referências (por exemplo, se hostcontroller () é uma fábrica de criação de criação simples) e usa referências fracas sobre esses ouvintes, isso significaria que é elegível para a coleta de lixo antes mesmo de terminar seu trabalho-até onde eu o entendo.