Olá pessoal, neste artigo estaremos vendo a diferença entre o Free, freeandNil e Release. Segue os exemplos desenvolvidos em Delphi 2010, porém nada impede ser serem utilizados em outras versões pois não existe nenhum comando novo, são comandos nativos desde que o Delphi surgiu.
Veremos agora um por um inicialmente falaremos do Free, vejam abaixo :
Free : O free é usado quando se quer liberar um objeto da memória, um form por exemplo. Reparem o exemplo abaixo:
Exemplo prático 01:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
FrmCliente := TFrmCliente.Create(Self);
with FrmCliente do
begin
try
ShowModal
finally
Free;
end;
end;
end;
Freeandnil : O Freeandnil é uma procedure que atribui nil a uma variável de instância seguida do free citado acima. Só e interessante ser usado quando você precisa verificar se um objeto foi criado usando o assigned. Se o free for chamado sozinho, a memória será liberada da mesma forma.
Exemplo prático 02:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
FrmCliente := TFrmCliente.Create(Self);
with FrmCliente do
begin
try
ShowModal
finally
FreeAndNil(FrmCliente);
end;
end;
end;
Release : Só utilizamos o release quando lidamos com forms, pois ele pertence a classe TCustomForm. Usamos o Release quando queremos liberar um form dentro de outro. Um bom exemplo é no evento Onclick de um botão do form que está sendo utilizado no momento. Este Release leva uma menssagem para o form e quando é executada chama o método free. A diferença do Release é que ele executa as menssagens e eventos que estiverem em fila daquele from antes de ser destruído e dispara um free pelo form.
Utilizar o Release fora de um form também acarreta neste resultado, só que não é muito eficiente, pois a menssagem é enviada para o form e depois chama o método free.
Exemplo prático 03:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
FrmCliente := TFrmCliente.Create(Self);
with FrmCliente do
begin
try
ShowModal
finally
Release;
end;
end;
end;
Fico aqui com mais este artigo, um abraço e até a próxima.
Daniel Pereira
Danielsantos1984@gmail.com