我有几个窗体,我有一个TListBox组件,我填充运行时。如何在Delphi中从内存中释放运行时ListBoxItems西雅图Firemonkey多设备应用程序
我的问题是如何最好地释放我添加运行时的项目?
- 通过使用所有者?表单或列表框?
- 还是自己释放它们?
- 或以不同的方式?
下面一个例子,我如何填写我的列表框:
procedure TForm1.LoadList;
var
item: TListBoxItem;
begin
myList.Clear;
myList.BeginUpdate;
try
with myQuery do
begin
First;
while not eof do
begin
item := TListBoxItem.Create(nil);
try
item.Tag := FieldByName(myIDField).AsInteger;
item.Text := FieldByName(myDescriptionField).AsString;
myList.AddObject(item);
finally
Next;
end;
end;
end;
finally
myList.EndUpdate;
end;
end;
我已经注意到,创建列表可能需要更长的时间,当我设置的项目的所有者。 另外当我调用ListBox.Clear和列表充满了没有所有者的项目列表仍然被正确清除。那么这是否意味着当我使用AddObject将它们添加到ListBox时,项目的所有者会被设置?
此外,我自由地与亲密动作形式:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := TCloseAction.CaFree;
end;
我不知道这是否会改变一切如何释放在我的列表中的项目?
Firemonkey使用ARC(自动引用计数)作为内存管理的一种手段。我建议你阅读[Embarcadero关于它的说明](http://docwiki.embarcadero.com/RADStudio/Seattle/en/Automatic_Reference_Counting_in_Delphi_Mobile_Compilers)。 –
@TomBrunberg我已阅读该页面,但我仍然不完全确定哪种方式适合我的情况。它并不真正涵盖可视化组件或列表,所以 – Remi
FMX不强加ARC。下一代编译器使用ARC作为内存管理。在桌面上,FMX使用与Vcl相同的内存管理,即基于所有权的 –