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