Array
(
)

Action:=caFree x FreeAndNil()

José Cordeiro
   - 05 dez 2005

Substituí Action:=caFree por FreeAndNil() em meus formulários e tive um problema: ao fechar a aplicação, o processo continuava carregado. Retornei ao formato anterior, no formulário principal, e o problema foi resolvido.

Perguntas:
a) FreeAndNil(<Instância do Form>) é equivalente aos comandos Action:=caFree + <Instância do Form>:=nil ?

b) Action:=caFree no formulário principal libera todos os recursos alocados pela aplicação?

c) Quando usar um e outro?

Grato pela atenção.


Nildo
   - 05 dez 2005


Citação:
Substituí Action:=caFree por FreeAndNil() em meus formulários e tive um problema: ao fechar a aplicação, o processo continuava carregado. Retornei ao formato anterior, no formulário principal, e o problema foi resolvido.

Perguntas:
a) FreeAndNil(<Instância do Form>) é equivalente aos comandos Action:=caFree + <Instância do Form>:=nil ?

b) Action:=caFree no formulário principal libera todos os recursos alocados pela aplicação?

c) Quando usar um e outro?

Grato pela atenção.


São duas coisas diferentes. o Action := caFree funciona dessa maneira:
Quando você criar um form e dar um ShowModal nele por exemplo, seu for ficaria assim:

#Código

SeuForm := TSeuForm.Create( Application );
SeuForm.ShowModal;
SeuForm.Free;


Se você usar o Action := caFree no SeuForm, evitaria que você utilizasse o SeuForm.Free no momento em que você o chamou.

Eu sempre dispenso o uso do FreeAndNil, mas o que ele faz é liberar um objeto da memória e atribuir NIL à variável dele.

Quando a colocar o Action := caFree no form principal, não precisa, pois quando você fechar seu Form Principal sua aplicação será fechada e todos os recursos utilizados por ela será liberado da memória.