2013-03-14 55 views
2

我目前正在使用Lua進行MOAI項目。我試圖爲某些遊戲對象設置一些壓力測試,然後在遊戲會話期間跟蹤我創建和銷燬的Lua對象的時間。我可以很容易地跟蹤「class」對象/表何時通過增加構造函數或初始化程序中的計數來初始化,但由於Lua沒有析構函數,所以我不知道如何跟蹤對象何時從內存中移除。此事。謝謝!Lua - 從內存中刪除對象時,遞減「class」對象計數

回答

2

要當一個Lua對象(我承擔全部用戶數據或表)走了通知,你爲它設置一個_gc metamethod

+1

我不認爲這將在MOAI工作,因爲它使用Lua 5.1。另外'debug'和'newproxy'不可用。 – finnw 2013-03-14 23:24:36

+0

@finnw,你說得對,如果對象是純粹的Lua表,那麼就沒有辦法獲得gc通知。我認爲他們是用C創建的用戶數據 – lhf 2013-03-15 00:30:25

1

也許弱表是你的答案,其中n esting。這裏有一個片段:

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。