引用计数加1
GUI:addRef(widget)
参数 必选 类型 注释
widget 是 obj 控件对象
引用计数减1
GUI:decRef(widget)
参数 必选 类型 注释
widget 是 obj 控件对象
自动释放
GUI:autoDecRef(widget)
参数 必选 类型 注释
widget 是 obj 控件对象 这个不理解 举个例子 什么意思
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-23 12:45:43 |
👁️ 阅读: 1
这三个函数是用于内存管理的,我来给你举个实际例子说明:
假设你创建了一个控件,然后需要在多个地方使用它:
```lua
-- 创建一个父窗口
local parent = GUI:Win_Create("TestWindow", 0, 0, 0, 0, false, false, true, false, false, false, 1)
-- 创建一个控件
local myWidget = GUI:Widget_Create(parent, "my_widget", 100, 100, 200, 200)
-- 场景1:控件被多个地方引用
-- 当控件需要在多个地方使用时,增加引用计数
GUI:addRef(myWidget) -- 引用计数从0变为1
-- 现在控件被保留,即使从父节点移除也不会立即释放
GUI:removeFromParent(myWidget)
-- 稍后在其他地方重新使用这个控件
local anotherParent = GUI:Win_Create("AnotherWindow", 0, 0, 0, 0, false, false, true, false, false, false, 1)
GUI:addChild(anotherParent, myWidget)
-- 当确定不再需要这个控件时,减少引用计数
GUI:decRef(myWidget) -- 引用计数从1变为0,此时控件会被释放
-- 场景2:使用自动释放模式
local autoWidget = GUI:Widget_Create(parent, "auto_widget", 200, 200, 100, 100)
-- 设置为自动释放模式
GUI:autoDecRef(autoWidget)
-- 当从父节点移除时,会自动减少引用计数
GUI:removeFromParent(autoWidget)
-- 此时如果引用计数为0,控件会自动释放
```
**简单理解:**
- `addRef`:告诉系统"我还要用这个控件,别删"
- `decRef`:告诉系统"我用完了,可以删了"
- `autoDecRef`:设置为"自动模式",从父节点移除时就自动告诉系统"用完了"
这就像图书馆借书:借书时登记(addRef),还书时注销(decRef),或者设置自动归还(autoDecRef)。
← 返回问答库