2

我目前正在使用 Lua 进行 MOAI 项目。我正在尝试为一些游戏对象设置一些压力测试,然后跟踪我在游戏会话期间创建和销毁的 Lua 对象的时间。我可以轻松跟踪“类”对象/表何时被创建通过增加构造函数或初始化程序中的计数来初始化。但是,由于 Lua 没有析构函数,我不确定如何跟踪对象何时从内存中删除。

非常感谢您对此事的任何帮助或建议。谢谢!

4

2 回答 2

2

要在 Lua 对象(我假设完整的用户数据或表)消失时收到通知,您可以为它设置一个_gc 元方法。

于 2013-03-14T18:02:14.547 回答
1

也许弱表是你的答案,嵌套。这是一个片段:

objectArray={}

function newObj(...)
   --your OOP code here
   --obj is the new table you made
   objectArray[#objectArray+1]=setmetatable({obj},{__mode='v'})
end

现在,在每帧运行的函数/块中:

for i=1,#objectArray do --no pairs for efficiency, being run every frame this matters
   local stillThere=#objectArray[i]
   stillThere=stillThere==1
   if not stillThere then deconstruct() end
end

不幸的是,你不能把桌子拿回来。我不确定是否有一个简单的解决方案,因为 __index 会停止 GC。

于 2013-03-18T22:11:03.717 回答