[DICA] Automatizando a destruição de objetos criados
27/03/2018
0
Olá pessoal, blz!?
Gostaria de compartilhar uma coisa que ando fazendo que de certa forma "automatiza" a destruição de objetos criados em um formulário.
Vai durar toda vida útil de um formulário, como uma conexão com o banco criada em tempo de execução.
[Dica 01] Se for passado no Create da conexão como parâmetro AOwner , passa-se a responsabilidade da destruição daquela conexão ao formulário. Exemplo:
Obs.¹: O Owner pode ser qualquer objeto.
[Dica 02] Existem classes que criamos onde os objetos de dentro vivem mudando de valor, por exemplo, um Objeto "TCliente" pertencente a uma classe "TVenda". Quando há uma substituição de cliente nessa venda é necessário que se destrua a instância que está na memória (caso ela exista) para modificar o cliente ou vendedor atribuído aquela venda por exemplo, o que tornaria o código redundante, já que muitas vezes é difícil lembrar de destruir sempre que vai atribuir algo novo a mesma variável.
A solução que apliquei foi a mascará a variável através uma property para interceptar, através do método Set, a atribuição de qualquer novo valor, limpando o valor antigo da memória para que o novo seja inserido sem problemas:
Espero que tenha ficado claro.
Obs.²: é possível que tenha errado algo na sintaxe porque escrevi aqui direto no navegador. kkkk, então me perdoem se for o caso.
Obs.³: É possível combinar as duas abordagens também rs
Valeu, abraço!
Essa dica foi gerada a partir de um comentário na aula [url:descricao=Memory Leak com lista de objetos - Delphi Memory Leak: Criando e destruindo objetos - Vídeo 5]//www.devmedia.com.br/memory-leak-com-lista-de-objetos-delphi-memory-leak-criando-e-destruindo-objetos-video-5/38590[/url]
Gostaria de compartilhar uma coisa que ando fazendo que de certa forma "automatiza" a destruição de objetos criados em um formulário.
Vai durar toda vida útil de um formulário, como uma conexão com o banco criada em tempo de execução.
[Dica 01] Se for passado no Create da conexão como parâmetro AOwner , passa-se a responsabilidade da destruição daquela conexão ao formulário. Exemplo:
var conBD : TFDConnection; begin conBD := TFDConnection.Create(Self); // Esse objeto será destruído quando o Self for. end;
Obs.¹: O Owner pode ser qualquer objeto.
[Dica 02] Existem classes que criamos onde os objetos de dentro vivem mudando de valor, por exemplo, um Objeto "TCliente" pertencente a uma classe "TVenda". Quando há uma substituição de cliente nessa venda é necessário que se destrua a instância que está na memória (caso ela exista) para modificar o cliente ou vendedor atribuído aquela venda por exemplo, o que tornaria o código redundante, já que muitas vezes é difícil lembrar de destruir sempre que vai atribuir algo novo a mesma variável.
A solução que apliquei foi a mascará a variável através uma property para interceptar, através do método Set, a atribuição de qualquer novo valor, limpando o valor antigo da memória para que o novo seja inserido sem problemas:
TVenda = class private FCliente: TCliente; procedure SetCliente(Value: TCliente); published property Cliente: TCliente read FCliente write SetCliente; end; implamentation uses SysUtils; procedure TVenda.SetCliente(Value: TCliente); begin if Assigned(FCliente) then FreeAndNil(FCliente); FCliente := Value; end; // Desse modo não precisamos lembrar de limpar o ponteiro da memória sempre que formos atribuir um novo valor a "Cliente" de "Venda".
Espero que tenha ficado claro.
Obs.²: é possível que tenha errado algo na sintaxe porque escrevi aqui direto no navegador. kkkk, então me perdoem se for o caso.
Obs.³: É possível combinar as duas abordagens também rs
Valeu, abraço!
Essa dica foi gerada a partir de um comentário na aula [url:descricao=Memory Leak com lista de objetos - Delphi Memory Leak: Criando e destruindo objetos - Vídeo 5]//www.devmedia.com.br/memory-leak-com-lista-de-objetos-delphi-memory-leak-criando-e-destruindo-objetos-video-5/38590[/url]
Lucas Guimarães
Curtir tópico
+ 1
Responder
Clique aqui para fazer login e interagir na Comunidade :)