我在这里读到 http://delphi.about.com/od/adptips2005/qt/cleartimage.htm ,从 TImage 清除图像的一种方法是将 nil 分配给 .Picture ,如下所示:

Image1.Picture := nil;

我只是想确定...我猜 Image1.Picture.loadFromFile(fileName) 会分配一些内存并简单地将其设置为 nil,而不释放内存,会导致内存泄漏。

我对么?如果是这样,从 TImage 卸载和清除图像的“正确”方法是什么?

最佳答案

TImage.Picture setter 是 TImage.SetPicture() 单元中的 ExtCtrls ,它调用 TPicture.Assign() 单元中的 Graphics ,它调用 TPicture.SetGraphic() ,它会在分配新的 Graphic 之前释放现有的 Graphic

所以使用

Image1.Picture := nil;

最终会打电话
Image1.Picture.SetGraphic(nil);

并且不会造成任何内存泄漏。

关于delphi - 通过分配 Image1.Picture := nil; cause a memory leak? 清除图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23991829/

10-12 21:16