[我读过Lua手册,但它没有提供可靠的答案。]

假设我有一个Lua Table,充当索引数组:

local myArray = {};
myArray[1] = "Foo";
myArray[2] = "Bar";

如何最好地处理此表?我只是将myArray设置为nil吗?或者我是否必须遍历数组并将每个索引元素设置为nil?

同样地,让我说我有一个Lua表,作为字典:

local myDictionary = {};
myDictionary["key1"] = "Foo";
myDictionary["key2"] = "Bar";

我可以将'myDictionary'设置为nil,还是必须迭代?

最后,我该做什么,内存管理方面,我有嵌套表的地方? e.g。

local myNestedCollection = {};
myNestedCollection[1] = {1, 2, 3};
myNestedCollection[2] = {4, 5, 6};

我是否需要遍历每个子表,将它们设置为nil?谢谢你的帮助。

有帮助吗?

解决方案

在大多数GC中,当没有对象的引用时,将收集一个对象。将参考链的顶部设置为nil会删除对子项的引用。如果这是唯一的参考,那么将收集孩子。

其他提示

将局部变量设置为 nil 就足够了;没有必要遍历所有键并将它们设置为 nil 。根据此页面,Lua使用标记 - 清除垃圾收集算法。一旦将局部变量设置为 nil ,其表中的键就变得无法访问,因此垃圾收集器将在下一个集合中收集它们。同样,如果这些对象也是表格,那么它们的密钥也将无法访问,因此它们也将被收集。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top