美文网首页
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