Qual a diferença em criar um objeto passando os seguintes valores para o parâmetro AOwner no método Create?


Formulario := TFormulario.Create(Application); 
Formulario := TFormulario.Create(nil); 
Formulario := TFormulario.Create(Self); 

A diferença é quem é o "dono" da janela. Ou seja, se o "dono" for desalocado, todos os forms que possuem este form como dono também são desalocados.

O Delphi implementa em todos os seus componentes o conceito de proprietário ou Owner que passa a ser o responsável por liberar da memória esses objetos que foram designados com sendo "seus" .

Formulario := TFormulario.Create(nil); 
O Proprietário é nil 
O Programador é responsável por liberar o Objeto 
Tempo de Vida Curto ( Cria , executa , Destroe) ; 

Formulario := TFormulario.Create(Self); 
O Proprietário é o ponteiro que pode ser um formulário ou (Derivado de TComponente
É destruído quando o Formulário/Self for destruído 
Tempo de vida , um pouco maior ( o do próprio formulário/Self)

Formulario := TFormulario.Create(Application); 
O Proprietário é a Aplicação 
É destruído quando a Aplicação for destruída 
Tempo de vida , ainda maior , mais tardar no fim da própria Aplicação 
Utilização: Para Formulários Não Modais

Dentro de um método de um Objeto Self aponta para a Instancia da Própria Classe , naquele momento que foi Chamado Application é uma variável global , inicializada automaticamente pelo Delphi Nil é um ponteiro Nulo que aponta para lugar nenhum na memória do computador 
As interfaces tem controle de referências ( Ótimo recurso) 
A boa prática evita memory Leaks ( vazamento de memory ) além de outros bugs

0 comentários:

Postar um comentário