3

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

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

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

我如何最好地处置这张桌子?我只是将 myArray 设置为 nil 吗?还是我必须遍历数组并将每个索引元素设置为零?

同样,假设我有一个 Lua 表,充当字典:

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

我可以将'myDictionary'设置为零,还是必须遍历?

最后,在内存管理方面,我在哪里嵌套了表,我该怎么办?例如

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

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

4

2 回答 2

6

只需将局部变量设置为nil;就足够了 无需遍历所有键并将它们设置nil为。根据this page,Lua 使用标记和清除垃圾收集算法。一旦将局部变量设置为nil,其表中的键就变得不可访问,因此它们将在下一次收集时被垃圾收集器收集。同样,如果这些对象也是表,它们的键也将变得不可访问,因此它们也将被收集。

于 2009-06-17T04:55:03.203 回答
5

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

于 2009-06-17T04:55:53.313 回答