美文网首页
lua弱引用 使用注意

lua弱引用 使用注意

作者: 李利知灬 | 来源:发表于2019-11-08 11:27 被阅读0次

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() 弱引用对象就为空。

相关文章

网友评论

      本文标题:lua弱引用 使用注意

      本文链接:https://www.haomeiwen.com/subject/zbeibctx.html