我在运行时使用以下代码从TImageList
中的资源加载多个图像:
Bitmap:=TBitmap.Create;
MyIcons:=TImageList.Create(self);
Bitmap.LoadFromResourceName(HInstance,'DEFAULT16');
MyIcons.AddMasked(BitMap,clRed);
Bitmap.LoadFromResourceName(HInstance,'FOLDER16');
MyIcons.AddMasked(BitMap,clRed);
Bitmap.LoadFromResourceName(HInstance,'BACK16');
MyIcons.AddMasked(BitMap,clRed);
Bitmap.Free;
我想知道在加载新位图时是否应销毁先前的位图(Bitmap.Assign(nil)
),否则这会在LoadFromResourceName
方法中自动完成。我的意思是我不想让内存泄漏...
答案 0 :(得分:4)
没有。执行<style>
.dihover{transition: .5s;}
.dihover:hover{background-color:#B7192A; color: white; cursor: pointer;}
a.setan{color:#7E7E7E;}
.setan:hover{color:white;}
tr.dihover a:hover{color:white;}
</style>
时,它会清除上一个映像使用的所有内存和资源,并加载新映像。
您的代码很好,以丢失的LoadFromResourceName
为模。它应该是:
try/finally
如果不这样做,如果在分配给Bitmap := TBitmap.Create;
try
....
finally
Bitmap.Free;
end;
和销毁对象之间引发异常,对象就不会被破坏而且会被泄露。