form:= nil free release

Delphi

17/10/2006

Porq criar o nil????

FrmCadCliente := TfrmCadCliente.Create(Application);
try
FrmCadCliente.ShowModal
finally
FrmCadCliente.Release;
FrmCadCliente := nil;
end;

Isso tah cert????

Preciso colocar no evento onclose do form
action:= free

Obrigado?


Souzaaguiar

Souzaaguiar

Curtidas 0

Respostas

Tnaires

Tnaires

17/10/2006

Olá
Se você tá colocando o Action := caFree não precisa dar Release no form. Do mesmo modo, se você tá dando Release no form, não precisa colocar o Action := caFree.
Abraços


GOSTEI 0
Massuda

Massuda

17/10/2006

Sobre o nil... nil equivale ao ponteiro nulo. Quando se escreve...
AlgumObjeto := nil;
...quer dizer que o objeto é nulo.

Em Delphi/Win32, atribuir nil a algum objeto não afeta o objeto anterior (se houver); via de regra, ele simplesmente é ´perdido´ na memória.


GOSTEI 0
Marco Salles

Marco Salles

17/10/2006

FrmCadCliente := TfrmCadCliente.Create(Application);

souzaaguiar , voce ´insiste´ em atribuir como Owner a aplicação e depois
destroe o formulário...Use nesse caso nil como proprietário cara. As biografias assim recomendam


Se você tá colocando o Action := caFree não precisa dar Release no form. Do mesmo modo, se você tá dando Release no form, não precisa colocar o Action := caFree. Abraços


Eu acho isso curioso . Porque destruir um form é muito mais que libera-lo da memória... O método release , espera que todas as mensagens pendendes do windows direncionadas ao formulário sejam devidamente processadas , antes de efetivar a destruição do mesmo. Isto evita que erros estranhos ocorram , como um processo externo tente acessar o formulário(ou algum controle filho) , apos sua destruição .

é claro que em aplicaçoes menores pode não fazer diferença.. Mas quando a complexidade aumenta , sera que action substitui o release ??? eu confesso que estou surpreso com esta colocação . Pois nunca li isto en nenhum lugar

Action:=cafree é sempre bem vindo...
o que se deve ter em mente é que quando o usuário clica no ´x´ para fechar a janela(ou pressiona alt+f4, cntr+f4) , as aplicaçoes do tipo SDI , esconde os formulários...No caso de aplicaçoes do tipo MDI , esse formulários são minimizados... Para alterar este comportamento e logo a seguir liberar estes formulários da memoria uses action:=cafree;


GOSTEI 0
Marco Salles

Marco Salles

17/10/2006

Sobre o nil... nil equivale ao ponteiro nulo. Quando se escreve...Código: [b:0dbd95863e]AlgumObjeto := nil; [/b:0dbd95863e] ...quer dizer que o objeto é nulo. Em Delphi/Win32, atribuir nil a algum objeto não afeta o objeto anterior (se houver); via de regra, ele simplesmente é ´perdido´ na memória.


A massuda , vi seu post depois de ter postado o meu... Mas acho que ele esta se referindo sobre Owner = nil e não a atribuir nil ao objeto.
Veja
[b:0dbd95863e]
Porq criar o nil????
[/b:0dbd95863e]


GOSTEI 0
Tnaires

Tnaires

17/10/2006

[quote:71c99277d6=´Marco Salles´]é claro que em aplicaçoes menores pode não fazer diferença.. Mas quando a complexidade aumenta , sera que action substitui o release ??? eu confesso que estou surpreso com esta colocação . Pois nunca li isto en nenhum lugar[/quote:71c99277d6]

Confesso que escrevi isso levando em conta apenas a liberação do form da memória... Então, manter o Release e o Action := caFree não fica redundante né?


GOSTEI 0
Marco Salles

Marco Salles

17/10/2006

tnaires escreveu
[quote:fbfe268a39]Marco Salles escreveu: é claro que em aplicaçoes menores pode não fazer diferença.. Mas quando a complexidade aumenta , sera que action substitui o release ??? eu confesso que estou surpreso com esta colocação . Pois nunca li isto en nenhum lugar


Confesso que escrevi isso levando em conta apenas a liberação do form da memória... Então, manter o Release e o Action := caFree não fica redundante né?[/quote:fbfe268a39]

Também confesso a voce que não tenho todo o embasamento teorico para afirmar que sim e nen tampouco afirmar que não... O que disse é que Destruir é diferente do que liberar e que as biografias recomendam o uso do Release para formulários.... Mas acho que este assunto deva ser mais discutido se é ou não uma redundância


GOSTEI 0
Martins

Martins

17/10/2006

vc poderia levar em conta algumas considerações:

[b:6ca55a60b8]
[color=red:6ca55a60b8]* Self[/color:6ca55a60b8] - [color=darkblue:6ca55a60b8]O próprietário (dono) do formulário é o metodo que o chamou no caso, seria o próprio Form, então, cabe ao programador destruir (liberar) o form da memória.[/color:6ca55a60b8]

[color=red:6ca55a60b8]* Nil [/color:6ca55a60b8] - [color=darkblue:6ca55a60b8]Este metodo especifica que na pratica a aplicação é responsável pelo form, embora teoricamente é como se não houvesse proprietário, sendo assim, o form só será liberado da memória quando a aplicação for encerrada ou quando for chamado o metodo free.[/color:6ca55a60b8]

[color=red:6ca55a60b8]*Application[/color:6ca55a60b8] - [color=darkblue:6ca55a60b8]Esse metodo não é recomendado, aqui sabemos que o dono do form é aplicação, por isso para liberarmos o form temos que encerrar a plicação ou utilizarmos free. [/color:6ca55a60b8]
[/b:6ca55a60b8]


var
   FrmCli : TFrmCli;
begin
   FrmCli := TFrmCli.Create(nil) ;
   try
     FrmCli.ShowModal;
   finally
     FrmCli.Free;
   end;
end;


O Colega Michael Benford escreveu certa vez algo sobre isso, aqui no fórum até mesmo na Revista Clube Delphi.

Boa sorte e bons códigos!


GOSTEI 0
Souzaaguiar

Souzaaguiar

17/10/2006

Depois q li o texto abaixo fiquei na duvida...


O metodo Free destroi um componente, liberando toda a memoria a ele alocada. O free apresenta uma vantagem sobre o metodo Destroy, pois nao gera erro quando o objeto nao existe. O release eh identico ao metodo free, exceto q aguarda que a execucao de codigo de todos os eventos pendentes do formulario ou componentes nele inseridos seja executado e finaliazado antes que o formulário seja liberado.


De qualquer forma jah ficou bem explicado... obrigado pessoal!!!


GOSTEI 0
Marco Salles

Marco Salles

17/10/2006

Depois q li o texto abaixo fiquei na duvida...


então não tenha mais duvida ... Para formulário as biografias recomendam usar o método [b:a2904d664e]Release[/b:a2904d664e]


GOSTEI 0
POSTAR