LUA删除类中的所有对象

时间:2016-11-10 01:29:45

标签: class object lua

需要遍历由以下类创建的所有对象,并在它们变得无用之后将其销毁;

Function.prototype.apply()

1 个答案:

答案 0 :(得分:1)

Lua中的表受GC影响。当它们变得“无用”时,简单地放弃所有引用,除非你关闭垃圾收集,否则它们的“破坏”将自然发生。

手动对表格进行GC处理的示例:

local mytable = {}

print(mytable)
print(collectgarbage('count'))

mytable = nil

collectgarbage()
print(collectgarbage('count'))

--[[stdout (approximation):
  table: 0x7fa821c066f0
  23.7412109375
  22.81640625
]]

如果要保留您创建的实例的记录,可以在表中存储对它们的引用。只需从表中删除它们就会导致GC清理它们,假设没有其他引用被保留。

像这样的天真:

local my_instances = {}

local function create_instance ()
    local t = {}

    my_instances[#my_instances + 1] = t

    return t
end

local function destroy_instances ()
    for i = 1, #my_instances do
        my_instances[i] = nil
    end
end

或者,您可以创建一个弱表,这样您就可以对程序中仍有外部引用的任何实例进行操作。再次,当此表之外的所有引用都丢失时,GC将启动。

local my_instances = setmetatable({}, {
    __mode = 'k'
})

local function create_instance ()
    local t = {}

    my_instances[t] = true

    return t
end