Joe*_*ang 3 lua garbage-collection memory-leaks lua-table
例如,我以这种方式创建了一个表
myTable = {}
for n=1,5
local item = {
name = "item"..n,
id = n,
}
myTable[n] = item
end
Run Code Online (Sandbox Code Playgroud)
当不再使用此表时,为了为垃圾收集器释放此表,
我是否需要遍历表格以将每个元素分配给nil?
for n=1,5
myTable[n] = nil
end
Run Code Online (Sandbox Code Playgroud)
或者我只需要将表分配给nil?
myTable = nil
Run Code Online (Sandbox Code Playgroud)
如果除了上面的内容之外,如果表元素有一些属性被分配给其他表,我是否也需要单独为它们添加?
for n=1,5
myTable[n].someTable = nil
myTable[n] = nil
end
myTable = nil
Run Code Online (Sandbox Code Playgroud)
简单分配myTable = nil就好了.你可以使用__gcmetamethod 测试它:
myTable = {}
for n=1,5 do
local item = {
name = "item"..n,
id = n,
}
setmetatable(item, {__gc = function (self) print("item " .. n .." collected") end})
myTable[n] = item
end
myTable = nil
collectgarbage()
Run Code Online (Sandbox Code Playgroud)
输出:
item 5 collected
item 4 collected
item 3 collected
item 2 collected
item 1 collected
Run Code Online (Sandbox Code Playgroud)
这意味着item垃圾收集器会收集所有表.