动态创建组件后一定要Free吗? 请详细说下,谢谢......``````````
动态创建组件后一定要free吗?
我是在线程里动态创建IDHTTP
这个IDHTTP每10秒都会工作一次,
难道每次create 之后 都要 free 那不是很纠结?
难道不能create之后就一直用idhttp.get,不用去free?
我用管理器和冰刃看了一下加free和不加free没什么区别呀?内存也不会增加什么的.
[解决办法]
这个是关于变量的生命周期,如果你在函数体中声明的变量,在函数结束的时候一定要释放,否则就会造成内存泄漏,如果你是类中声明的变量,则可以在类销毁的时候再销毁,你可以在类中方法多次用。
[解决办法]
这样创建
Fidhttp1 := tidhttp.Create(nil);
必须要Free
Fidhttp1 := tidhttp.Create(sef);
或
Fidhttp1 := tidhttp.Create(Application);
则不需要Free,因为它会随窗口或工程的释放而自动释放。
[解决办法]
把Idhttp 申明为你定义的线程地 成员,然后在你线程创建地地方初始化, 线程销毁的时候释放
这样你就不用去管了.............
[解决办法]
var Fidhttp1:tidhttp;
begin
Fidhttp1 := tidhttp.Create(nil);
for i:=0 to 50 do
begin
sleep(10000);
Memo1.Text := Fidhttp1.Get('http://tieba.baidu.com');
end;
Fidhttp1.Free; //循环结束后在free
end;
这样写是可以的
Fidhttp1 := tidhttp.Create(Application);
这样的好处是你创建后 TApplication 中会增加一个tidhttp指针帮你销毁 所以可以不用Fidhttp1.Free;
但我们编程的都喜欢自立更生的 所以有创建就有销毁么 关键是在什么时候创建 什么时候销毁