我对使用什么来存储列表中的对象有点困惑。
到目前为止我已经使用过TList
并释放循环中的每个项目。然后我发现TObjectList
自动执行此操作Free
。然后我从文档中看到了这个TList.Clear
:
Call Clear
清空 Items 数组并设置Count
to 0. Clear
还
释放用于存储的内存Items
数组并设置Capacity
to 0.
所以基本上是一样的。所以
for TList
mylist.Clear;
myList.Free;
与相同TObjectList
?
myList.Free;
Can TObjectList
只能用于作为类的项目或者我可以存储记录吗?
1. TList 不会释放元素,同时Clear
or Free
.
aList.Clear;
将刚刚设置aList.Count := 0
而不释放aList.Items[]
元素。所以你会泄漏内存。你需要一个显式的免费:
for i := 0 to aList.Count-1 do
TObject(aList[i]).Free;
但这就是TObjectList
做... :)
About TObjectList
,值得一提的是TObjectList.Destroy
正在打电话Clear
.
So
aObjectList.Clear;
aObjectList.Free;
完全一样
aObjectList.Free;
2. 要存储记录列表,可以使用动态数组。
你会得到全部TList
方法(以及更多)与我们的动态数组包装器 http://blog.synopse.info/post/2011/03/12/TDynArray-and-Record-compare/load/save-using-fast-RTTI。那是,Add / Delete / Clear / Count / IndexOf / Find
...
它具有内置的序列化功能(二进制或 JSON)、自动排序和比较(使用 RTTI),这些功能是TList/TObjectList
。从 Delphi 5 及更高版本开始。
对于更现代版本的 Delphi,您可以使用generics如果您不想使用第三方库,则可以处理动态数组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)