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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top