在这种情况下如何释放内存?

时间:2013-12-14 18:01:30

标签: dispose lazarus

我有这种类型的定义:

KMenuClass = class
    private
      pMenuID: String;
    public
      property MenuID: String read pMenuID;
      constructor Create(const paraMenuID: String);
  end;

然后我这样做:

constructor KMenuClass.Create(const paraMenuID: String);
begin
  pMenuID:= paraMenuID;
end;

procedure TfrmPermissions.FormCreate(Sender: TObject);
begin
  clSetup.Items.AddObject('ant', KMenuClass.Create('a007'));
  clSetup.Items.AddObject('cat', KMenuClass.Create('x123'));

end;

以上两个条目仅限测试条目。我真的在看大约50件物品。 clSetup 的类型为TCheckListBox,我基本上存储了第二个字符串以及 Items 字符串。

我可以输出这样的特定项目:

Var
  ThisItem : KMenuClass;
.
.
.
  ThisItem := clSetup.Items.Objects[clSetup.ItemIndex] as KMenuClass;

  ShowMessage(clSetup.Items[clSetup.ItemIndex] + ' : ' + ThisItem.MenuID);

但是如何处理与每个列表项关联的对象?关闭表单时会自动处理吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

手动迭代items.objects,items.count次并释放每个对象可能是唯一的方法,因为该属性可能是tstrings,并且没有ownsobjects属性(只有在tstringlist中)。