GARANTIR DESCONTO

Fórum --gt; Qual a diferença entre o método FREE e o NIL ??? #182527

17/09/2003

0

--> Qual a diferença entre o método FREE e o NIL ???

Alguém poderia me dar uma explicação? :roll:

Muito Obrigado.

Alex. :lol:


Alex_

Alex_

Responder

Posts

17/09/2003

Rafael Heise

O que acontece é o seguinte...
Por Default, os componentes que descendem da classe TObject tem o método Free para ser usado. O que o help diz a repeito disso:
´Destroys an object and frees its associated memory, if necessary´
ou, destrói o objeto e libera a memória associada se for necessário.
´Use Free to destroy an object. Free automatically calls the destructor if the object reference is not nil´, e o próprio help recomenda: Use Free to destruir um objeto. Free automaticamente chama o destructor do objeto e seta a referência (da memória) para nil.

O que é então o Free. O Free é um método da classe TObject que chama o método Destroy (ou algum outro método declarado como desctructor) e libera a referência da memória do objeto. Quando você faz Objeto := Nil; ele não está sendo liberado da memória. Quando você faz isso, ele simplesmente perde a referência mas a memória continua alocada, ou seja, se o seu componente está usando 1kb de memória, quando fizer ele receber Nil, esse 1kb continuará lá, mas órfão, ou, sem uma referência, sem um pai, até que a memória seja liberada. E esse era um dos problemas no win98, pois como o SO não tem um bom gerenciador de memória, essa alocação ficava até você reiniciar a máquina. Já no winxp não, com o gerenciado que ele tem, ele libera a memória alocada que não está sendo usada por nada, ou, que não tem referência a lugar algum. Sacou ?
Essa é a diferença entre Free e Nil.

Existe ainda alguns outros detalhes do Free que o Help relata:
1) Free diferente do Destroy mesmo que o objeto não tenha referência ele não resultará em erro.
2) Todos os componentes e controles que tem como pai um objeto que chamou o Free também serão chamados seus respectivos Free, liberando toda a memória usada, assim como quando é finalizada uma aplicação, onde todos os formulários são desalocados da memória.

Atenção: Nunca chame Free de um componente em alguns dos seus eventos. Por exemplo, chamar o Free de um botão no OnClick do mesmo.

3) Para liberar um formulário, use o método Release, pois ele somente liberará a memória depois que seus eventos que estão na fila forem executados.

é isso ae...
abraços...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar