[我读过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,还是必须迭代?
最后,我该怎么做,内存管理明智,我有嵌套表的地方?例如
local myNestedCollection = {}; myNestedCollection[1] = {1, 2, 3}; myNestedCollection[2] = {4, 5, 6};
我是否需要遍历每个子表,将它们设置为nil?谢谢你的帮助.
将局部变量设置为nil
; 没有必要遍历所有键并将它们设置nil
为.根据这个页面,Lua使用了标记和清除垃圾收集算法.一旦将局部变量设置为nil
,其表中的键就变得无法访问,因此垃圾收集器将在下一个集合中收集它们.同样,如果这些对象也是表,它们的键也将无法访问,因此它们也将被收集.
在大多数GC中,当没有对象引用时,将收集对象.将参考链的顶部设置为nil会删除对子项的引用.如果这是唯一的参考,那么将收集孩子.