弱引用table
key1 = {"one"}
key2 = {"two"}

t = {}
setmetatable(t,{__mode="kv"})

t[key1] = 10
key1 = nil
t[key2] = 100
key2 = nil

collectgarbage()  --主动调用gc回收垃圾

for k,v in pairs(t) do
print(k,v)
end


t的key值是一些table,后面被赋值为nil了,表明其实这条数据是不需要的了,但是gc是不知道的,这些table的key被存在的table引用着。

所以使用弱引用,设置table的元表的元方法__mode(一个字符串),带有k表示key值为弱引用,带有v表示value是弱引用,反正出现弱引用的值被nil了,整个条目都会被移除。


首页 我的博客
粤ICP备17103704号