Closed yhnu closed 4 years ago
你这不都注册到C#里头了么?C#没反注册都还引用着。 ps一下,你这段代码,直接在lua那调用AddListener,传lua函数即可,不需要通过LuaFunction中转,lua函数可以映射到delegate。不过这建议和你的问题无关。
你说的反注册是指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
可能删的不干净吧,另外ugui有缓存,你可以看下之前的issues,而且网上也有人就这问题写过博客
好的,我看一下相关情况
在调用次函数之前之后都做了SystemGC和LuaGC
测试结果是匿名函数Lua并没有被回收:
想知道问题原因,以及如何能够避免此类现象,能否抽空解答下?