lua5.1中实现__gc
来源:互联网 发布:ffmeg-java 编辑:程序博客网 时间:2024/05/22 13:11
lua 元表中有个很好用的方法就是 __gc,这个方法是在 table 被回收时会触发的回调,可以用来做一些 lua内存泄露 及 资源释放 等操作
怎奈这个方法在 lua5.1 版本是不支持的,5.2以上的版本才可以直接使用。
大部分 unity 和 cocos2dx 接入的tolua应该用的lua都是5.1的版本吧。在 stackoverflow 上搜到一个lua5.1实现 __gc 的解决方案
lua5.2版本使用 __gc
使用非常简单
local tab = { _name = "default" }setmetatable(tab, { __gc = function ( t ) print("__gc, _name:", t._name) end })collectgarbage("collect") -- 强制垃圾回收
结果:
__gc, _name: default[Finished in 0.0s]
lua5.1版本使用 __gc
local function setmt__gc(t, mt) local prox = newproxy(true) getmetatable(prox).__gc = function() mt.__gc(t) end t[prox] = true return setmetatable(t, mt)endlocal function gctest(self) print("cleaning up: ", self._name)endlocal test = setmt__gc({_name = "yangx"}, {__gc = gctest}) collectgarbage("collect") -- 强制垃圾回收
结果:
cleaning up: yangx[Finished in 0.0s]
- 参考链接
- http://stackoverflow.com/questions/27426704/lua-5-1-workaround-for-gc-metamethod-for-tables
0 0
- lua5.1中实现__gc
- Lua5.1中数学库
- Lua5.1中数学库
- 在BCB6中使用lua5.1
- lua5.1.4中实现自定义require的loader函数
- lua5.1.4中实现自定义require的loader函数
- 关键词__gc
- 探索Lua5.2内部实现:虚拟机指令(1) 概述
- 探索Lua5.2内部实现:编译系统(1) 概述
- 探索Lua5.2内部实现:Garbage Collection(1) 原理
- 探索Lua5.2内部实现:Garbage Collection(1)
- 在游戏中如何使用LUA5.1脚本语言
- vs项目中使用c++调用lua5.1
- 开始使用lua5.1
- lua5.1 + c + linux
- lua5.1 辅助库函数
- LUA5.1手册
- Lua5.1 table库
- eclipse注解提示卡主出错 或者注解提示没有注解的解决
- 近期IEEE会议
- (复习)Struts2+MySQL完成登录和验证(一)
- 三步快速解决dll冲突问题
- Rxjava教程《RxJava Essentials》中文版
- lua5.1中实现__gc
- 有奖征文:Bluemix云上实践征集喽~
- QT容器类(二) 之 Iterator
- Css 元素之间的模式转换
- http://click.aliyun.com/m/20667/
- 理解express中间件bodyparser
- 滤波器代码生成网站
- SVN 64位 中文汉化版本 1.9.5.27581
- 分布式数据访问服务之1