form:= nil free release
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?
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
Curtidas 0
Respostas
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
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
17/10/2006
Sobre o nil... nil equivale ao ponteiro nulo. Quando se escreve......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.
AlgumObjeto := nil;
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
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
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
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é?
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
17/10/2006
tnaires escreveu
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
[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
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]
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!
[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
17/10/2006
Depois q li o texto abaixo fiquei na duvida...
De qualquer forma jah ficou bem explicado... obrigado pessoal!!!
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
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