Dúvida sobre descarregar form da memória... Cafree ou Nil?
Bom dia companheiros...
Vejam se podem me ajudar...
Estou criando os form´s do meu sistema em tempo de execução, e descarregando da memória da seguinte forma:
Para criar eu utilizo:
frmEscritorios := TfrmEscritorios.create(Self);
Para descarregar da memória utilizo no onclose do form:
Action := caFree;
Eu vi um projeto onde para descarregar o form da memória, além de utilizar Action := CAfree, o programador também colocava Form1 := Nil.
Então ficava assim:
Action := caFree;
Form1 := Nil;
Esse comando Nil, tem a mesma função do CaFree?
Devo utilizar os dois juntos para realmente descarregar o form da memória?
Será queda forma como estou fazendo, utilizando somente o CaFree, o form ainda continua carregado na memória?
Um grande abraço a todos...
Pablo - Marília/SP
Um grande abraço a todos
Vejam se podem me ajudar...
Estou criando os form´s do meu sistema em tempo de execução, e descarregando da memória da seguinte forma:
Para criar eu utilizo:
frmEscritorios := TfrmEscritorios.create(Self);
Para descarregar da memória utilizo no onclose do form:
Action := caFree;
Eu vi um projeto onde para descarregar o form da memória, além de utilizar Action := CAfree, o programador também colocava Form1 := Nil.
Então ficava assim:
Action := caFree;
Form1 := Nil;
Esse comando Nil, tem a mesma função do CaFree?
Devo utilizar os dois juntos para realmente descarregar o form da memória?
Será queda forma como estou fazendo, utilizando somente o CaFree, o form ainda continua carregado na memória?
Um grande abraço a todos...
Pablo - Marília/SP
Um grande abraço a todos
Pablo_lima
Curtidas 0
Respostas
Cebikyn
06/10/2003
vc pode usar apenas um método, pessoas que usam os dois querem apenas ter ´certeza´ de que estão liberando o form, é apenas frescura, pode usar do jeito que está fazendo.
GOSTEI 0
Beppe
06/10/2003
Atribuir nil para uma variavel do tipo objeto não a libera da memória, apenas serve para avisar que ela não é mais válida, para evitar erros do tipo:
Quando Form1.Free executa, ele libera a memória usada por ele mas deixa um dangling pointer(variável referênciando memória já dealocada).
Então é aconselhável atribuir nil após um Free, ou alternativamente, apenas chamar FreeAndNil(objeto).
O caFree é usado no lugar de Free somente dentro de OnClose.
Ataliba.
Form1.Free; ... // código que não usa Form1 ... if Assigned(Form1) then Form1.Show;
Quando Form1.Free executa, ele libera a memória usada por ele mas deixa um dangling pointer(variável referênciando memória já dealocada).
Então é aconselhável atribuir nil após um Free, ou alternativamente, apenas chamar FreeAndNil(objeto).
O caFree é usado no lugar de Free somente dentro de OnClose.
Ataliba.
GOSTEI 0
Rfpsatin
06/10/2003
Action = caFree é muito usado qdo vc trabalha com MDI.
C vc estiver usando uma versão do delphi 5 ou 6 pode usar da seguinte forma.
try
Form1:=Tform1.create(self);
Form1....
finally
FreeAndNil(Form1);
end;
Este método, FreeAndNil, faz exatamente o q o nome sujere, é um dos + indicados (Marco Cantù).
C vc estiver usando uma versão do delphi 5 ou 6 pode usar da seguinte forma.
try
Form1:=Tform1.create(self);
Form1....
finally
FreeAndNil(Form1);
end;
Este método, FreeAndNil, faz exatamente o q o nome sujere, é um dos + indicados (Marco Cantù).
GOSTEI 0
Lucas Tertuliano
06/10/2003
Olá, eu estava com um problema desses. Executava o programa e quando fechava, ele continuava ocupando a memoria mesmo com o action =: caFree, precisaca chamar o gerenciador do windows para poder fechá-lo. Tentei o nil também, mas não funcionaou. Então depois tentar muitas outras opções descobri uma que me serviu.
Coloquei Application.Terminate; abaixo do action =: caFree; e funcionou.
ex:
Action := caFree; //ação do objeto TCloseAction para fechar a tela
Application.Terminate; // Fecha sua aplicação
Application.Terminate; // Fecha sua aplicação
GOSTEI 0
Marco Salles
06/10/2003
Como o amigo consegui desenterrar um tópico de 2003 ( do forum antigo ) ?????????
mistérios.....
Histórico do tópico:
# Ação Autor ação Data 186463 Chamado iniciado Pablo_Lima 10/6/2003 186464 Chamado resp. pelo usuario
cebikyn 10/6/2003 186465 Chamado resp. pelo usuario
Beppe 10/6/2003 186466 Chamado resp. pelo usuario
rfpsatin 10/6/2003 378929 Chamado resp. pelo usuario
Lucas Tertuliano 6/5/2010 6:07:32 PM 378932 Chamado resp. pelo usuario
MARCO ANTONIO SALLES 6/5/2010 6:46:18 PM
# Ação Autor ação Data 186463 Chamado iniciado Pablo_Lima 10/6/2003 186464 Chamado resp. pelo usuario
cebikyn 10/6/2003 186465 Chamado resp. pelo usuario
Beppe 10/6/2003 186466 Chamado resp. pelo usuario
rfpsatin 10/6/2003 378929 Chamado resp. pelo usuario
Lucas Tertuliano 6/5/2010 6:07:32 PM 378932 Chamado resp. pelo usuario
MARCO ANTONIO SALLES 6/5/2010 6:46:18 PM
GOSTEI 0