说明:
UMG对象的释放流程:
1、调用self:Release(),解除LuaTable在C++侧的引用
2、确保LuaTable在Lua侧没有其他引用,触发LuaGC
3、C++侧收到UObject_Delete回调,解除UMG在C++侧的引用
4、确保UMG在C++侧没有其他引用,触发UEGC
小提示:
使用控制台命令查看对象和类的引用情况:
查看指定类的引用列表:Obj List Class=ReleaseUMG_Root_C
查看指定对象的引用链:Obj Refs Name=ReleaseUMG_Root_C_0
]]
local Screen = require "Tutorials.Screen"
local M = UnLua.Class()
local function print_intro()
local msg =
[[
使用以下按键进行一次强制垃圾回收:
C:强制 C++ GC
L:强制 Lua GC
—— 本示例来自 "Content/Script/Tutorials.11_ReleaseUMG.lua"
]]
Screen.Print(msg)
end
function M:ReceiveBeginPlay()
local widget_class = UE.UClass.Load("/Game/Tutorials/11_ReleaseUMG/ReleaseUMG_Root.ReleaseUMG_Root_C")
local widget_root = NewObject(widget_class, self)
widget_root:AddToViewport()
print_intro()
end
function M:L_Pressed()
collectgarbage("collect")
Screen.Print('collectgarbage("collect")')
end
function M:C_Pressed()
UE.UKismetSystemLibrary.CollectGarbage()
Screen.Print("UKismetSystemLibrary.CollectGarbage()")
end
return M