2013-12-14 36 views
3

我有这种类型的定义:如何在这种情况下释放内存?

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; 

上述两个项目(AER)仅测试项。我真的在看约50件物品。 clSetup是TCheckListBox类型,我基本上存储第二个字符串以及项目字符串。

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

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

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

但我怎么处理与各列表项关联我的对象?当我关闭表单时是否自动处理?

谢谢!

回答

1

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

+0

谢谢你的回答。我明白你的观点,但好奇的是,如果我希望在表格关闭时自动处理它,这是错误的吗? – itsols

+0

我应该使用'ThisIem.Free'还是'ThisItem.FreeInstance'? – itsols

+0

是的,我的猜测是他们不会靠近。系统不知道他们是否拥有或引用。和.free –