for i:=1 to 3 do
begin
Image := TImage.Create(Form1);
with Image do
begin
Parent := Form1;
Left := ImageLeft;
Top := ImageTop;
Width := ImageWidth;
Height := ImageHeight;
image.Picture.LoadFromFile('F:\delphi制作\loadpic\'+inttostr(i)+'.bmp');
end;
ImageLeft:=ImageLeft+60;
end;
以上代码存在内存泄露问题,那如何回收内存,是回收三副呢,还是一幅:
也就是说是:
for i := 1 to 3 do
begin
image.free;
end;
还是
image.free 这样一句就可以了,为什么?
请高手指点一下,谢谢!在线等!
begin
Image := TImage.Create(Form1);
with Image do
begin
Parent := Form1;
Left := ImageLeft;
Top := ImageTop;
Width := ImageWidth;
Height := ImageHeight;
image.Picture.LoadFromFile('F:\delphi制作\loadpic\'+inttostr(i)+'.bmp');
end;
ImageLeft:=ImageLeft+60;
end;
以上代码存在内存泄露问题,那如何回收内存,是回收三副呢,还是一幅:
也就是说是:
for i := 1 to 3 do
begin
image.free;
end;
还是
image.free 这样一句就可以了,为什么?
请高手指点一下,谢谢!在线等!
image1 := TImage.Create...
image2 := TImage.Create...
image3 := TImage.Create...释放直接释放就行了
image1.Free;
image2.Free;
image3:Free;
(如果你不需要重新创建的话, Free都不用了窗体释放的时候它们自然会释放,当然前提是
imagex := TImage.Creaate(Self);)
begin
Image := TImage.Create(Form1);
...
ImageLeft:=ImageLeft+60;
ImageLeft.free; //释放
end;
imagex := TImage.Creaate(Self);)
跟 Image := TImage.Create(Form1); 有什么两样?
var
YourList:TList;
procedure CreateImage;
var
i:integer;
Image:TImage;
begin
for i:=1 to 3 do
begin
Image := TImage.Create(Form1);
YourList.Add(Image);
...
ImageLeft:=ImageLeft+60;
end;
end;
procedure FreeImage;
var
i:integer
begin
for i:=0 to YourList.count-2 do
begin
TImage(YourList[i]).Free;
end;
end;
begin
Image := TImage.Create(Self);
with Image do
begin
Parent := Form1;
Left := ImageLeft;
Top := ImageTop;
Width := ImageWidth;
Height := ImageHeight;
image.Picture.LoadFromFile('F:\delphi制作\loadpic\'+inttostr(i)+'.bmp');
end;
ImageLeft:=ImageLeft+60;
end;难道这样的代码就不会出现内存泄露吗?(关闭FORM1后自动回收内存)?
Image := TImage.Create(Form1);
InsertControl(Image);
就不用手工释放了,由Form自己释放