forked from Tencent/UnLua
-
Notifications
You must be signed in to change notification settings - Fork 0
/
11_ReleaseUMG.lua
55 lines (40 loc) · 1.33 KB
/
11_ReleaseUMG.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
--[[
说明:
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
]] --
require "UnLua"
local Screen = require "Tutorials.Screen"
local M = 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