lua的弱引用 使用
lua弱引用一般是通过table来实现的
如: local a = {}
setmetatable(a, {__mode = "k"})
想使用 弱引用 ,自己使用的table必须设置弱引用方法__mode="k"或者是__mode="v" (key是指table的索引,value是 table的值) 或者两个都行__mode="kv".
使用实例:
local a = {1, 4, name = "cq"}
setmetatable(a, {__mode = "k"})
local key = {}
a[key] = "key1"
key = {}
a[key] = "key2"
print("before GC")
for k, v in pairs(a) do
print(k, "\t", v)
end
collectgarbage()
print("\nafter GC")
for k, v in pairs(a) do
print(k, "\t", v)
end
注意:lua的Gc回收机制 和c#差不多, 都是当数据的引用为0的时候 才会被GC回收(使用 collectgarbage()也可以)。所以这里第一个key的引用被取消后,在a中的弱引用 就会被回收。 (数字、字符串和布尔值不会被回收)
理解:弱引用相当于 不给GC系统指针但能免费使用的机制。
优缺点:使用有危险,只要除了弱引用以外的指针为0时, 随时会被GC回收,但是能够最大限度的利用内存。
特点:没有强引用,使用 collectgarbage() 弱引用对象就为空。
网友评论