lua 弱引用

lua引入弱引用的机制导致被引用的对象的引用计数不会变化,从而当将某个被引用的对象重置为nil的时候垃圾回收能够回收内存,更利于内存的释放,但是一旦使用弱引用如果一个表使用了另外一个对象当做key或者value,一旦key或者value重置为nil的时候,这个对象也就随之被删除。

弱引用的使用:三种使用方式:k,v,kv

顾名思义:

1: k的意思就是对指定对键的弱引用。

2: v的意思就是对指定值得弱引用。

3: kv的意思就是对指定键和值得弱引用。

-- t1 = {};
-- t2 = {};

-- t = {};
-- t[1] = t1;
-- t[2] = t2;
-- t[3] = 10;

-- t1 = nil;
-- t2 = nil;

-- print("t's len is " .. #t);
-- collectgarbage();
-- print("t's len is " .. #t);

local t = {};
-- 将表设置为元表后,通过__mode = "k"
-- 将其指定为对键的弱引用,也就是说,一旦表中的某个键被垃圾回收,t中会删除
setmetatable(t, { __mode = "kv" });

key1 = { name = "key1" };
t[key1] = 1;
key1 = nil;

key2 = { name = "key2" };
t[key2] = 1;
key2 = nil;

for key, value in pairs(t) do
    print(key.name, value)
end
collectgarbage();

for key, value in pairs(t) do
    print(key.name, value)
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值