Tencent / xLua

xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc.
Other
9.44k stars 2.46k forks source link

LuaFunction泄露问题? #769

Closed yhnu closed 4 years ago

yhnu commented 4 years ago

在调用次函数之前之后都做了SystemGC和LuaGC image

测试结果是匿名函数Lua并没有被回收: image

想知道问题原因,以及如何能够避免此类现象,能否抽空解答下?

chexiongsheng commented 4 years ago

你这不都注册到C#里头了么?C#没反注册都还引用着。 ps一下,你这段代码,直接在lua那调用AddListener,传lua函数即可,不需要通过LuaFunction中转,lua函数可以映射到delegate。不过这建议和你的问题无关。

yhnu commented 4 years ago

你说的反注册是指RemoveAllListeners么?我这边界面关闭后会进行Remove操作的.

function UIPanel:UnInitButtonEvent()
    if not self.tbOnClick then
        return
    end
    for key, _ in pairs(self.tbOnClick) do
        if self[key] then
            local btn = self.pPanel:GetButton(self[key])
            if btn then
                btn.onClick:RemoveAllListeners()
            else
                LogErr(string.format("UnInitButtonEvent Error! Wnd=%s, key=%s not exist !", self.ClassName, self[key]))
            end
        else
            LogErr(string.format("UnInitButtonEvent Error! Wnd=%s, key=%s not exist !", self.ClassName, key))
        end
    end
end
chexiongsheng commented 4 years ago

可能删的不干净吧,另外ugui有缓存,你可以看下之前的issues,而且网上也有人就这问题写过博客

yhnu commented 4 years ago

好的,我看一下相关情况