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:
Alguém poderia me dar uma explicação? :roll:
Muito Obrigado.
Alex. :lol:
Alex_
Curtir tópico
+ 0
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...
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
Clique aqui para fazer login e interagir na Comunidade :)