我对使用什么来存储列表中的对象有点困惑。
到目前为止,我已经使用了 TList
并释放了循环中的每个项目。然后我发现 TObjectList
可以从 Free
自动执行此操作。然后我从 TList.Clear
的文档中看到了这一点:
Call
Clear
to empty the Items array and set theCount
to 0.Clear
also frees the memory used to store theItems
array and sets theCapacity
to 0.
所以基本上是一样的。所以
对于TList
mylist.Clear;
myList.Free;
与TObjectList
相同吗?
myList.Free;
TObjectList
只能用于作为类的项目还是可以存储记录?
最佳答案
<强>1。无论使用 Clear
或 Free
,TList 都不会释放元素。
aList.Clear;
只会设置 aList.Count := 0
而不释放 aList.Items[]
元素。所以你会泄漏内存。您需要这样的显式免费:
for i := 0 to aList.Count-1 do
TObject(aList[i]).Free;
但这就是TObjectList
的作用...:)
关于TObjectList
,值得一提的是TObjectList.Destroy
正在调用Clear
。
所以
aObjectList.Clear;
aObjectList.Free;
与
完全相同aObjectList.Free;
<强>2。要存储记录列表,您可以使用动态数组。
您将通过我们的 dynamic array wrapper 获得所有 TList
方法(以及更多) 。即添加/删除/清除/计数/IndexOf/查找
...
它具有内置的序列化功能(二进制或 JSON)、自动排序和比较(使用 RTTI),这些功能是 TList/TObjectList
所不具备的。从 Delphi 5 及更高版本开始。
在更现代的 Delphi 版本中,如果您不想使用第三方库,您可以使用泛型来处理动态数组。
关于delphi - 清除 TList 或 TObjectList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10410019/