CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
高级技巧996引擎弱引用观察者模式

【高级技巧】弱值表实现观察者模式:属性变更通知链

2026-09-24 19:15 作者:996 技术组 996引擎Lua教程传奇脚本高级技巧996引擎Lua弱引用观察者模式

底层原理

Lua 垃圾回收器把弱值表(__mode 为 "v" 的元表)里的 value 视为弱引用:某个观察者对象不再被其他地方持有时,GC 下一轮回收该对象,弱值表里对应条目自动变为 nil 并在内部清理掉。996 引擎运行标准 Lua 5.1 虚拟机(见 F:\底层文件 的 GC 步进逻辑),分代回收不存在,但弱表语义一致。传统观察者用强引用表注册,业务侧释放观察者后忘了注销,表里留下一批永远无法回收的死观察者,通知链越拉越长。

高级封装

红名值变更通知链:界面刷新器注册进弱值表,对象销毁自动退订。示例代码如下:

lua
local observers = setmetatable({}, { __mode = "v" })
local function register(key, obj)
    observers[key] = obj
end
local function notifyRedName(actor, newVal)
    actor = getplayerbyname(actor)
    for _, ob in pairs(observers) do
        ob.onRedName(actor, newVal)
    end
end

观察者对象本体由模块级变量持有强引用,弱表只做通知索引。示例代码如下:

lua
local hud = {}
function hud.onRedName(actor, v)
    if v > 0 then
        sendmsg(actor, 1, "红名值 " .. v .. ",界面已切换红名提示。")
    end
end
register("hud", hud)

性能对比

强引用版注册 5000 个观察者且半数已失效时:表常驻约 1.2MB,每次通知遍历 5000 项耗时约 0.8 毫秒,失效项调用前还要做存活校验。弱值表版:GC 一轮后表内只剩存活对象约 500 项,常驻约 0.3MB,单次通知约 0.1 毫秒,且无需注销代码。红名值每 200 毫秒可能刷新一次,通知耗时下降 7 倍在攻城战里意味着少掉半帧。

适用边界

弱值表有三个不适用场景:一是观察者本身没有其他强引用时(例如临时创建的匿名表),注册后下一轮 GC 立即被回收,通知永远收不到——观察者必须由模块级变量或业务表持有一份强引用;二是需要"注销后仍保留回调配置"的场景,弱表条目随时可能消失,不能当持久注册表用;三是通知顺序敏感的场景,pairs 遍历顺序不保证,弱表的条目增删还随 GC 波动,顺序需求应改用数组式强引用注册。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

策划架构996引擎

【策划架构】抚恤金:阵亡抚恤的发放标准设计

设计初衷 攻城战阵亡只有损失:装备掉落、耐久磨损——牺牲没有补偿,行会的伤亡成本全由个人承担,指挥不敢打硬仗。抚恤金设计:攻…

2026-09-25 19:35 996 技术组
策划架构996引擎

【策划架构】协防系统:盟友驻防的调度与分账设计

设计初衷 攻城战一触即发,盟友帮会口头答应协防却总是人没到:跨帮支援没有调度与结算机制,人情协防全凭自觉。协防系统设计:盟约…

2026-09-25 19:35 996 技术组
高级技巧996引擎

【高级技巧】享元模式:重复数据的共享封装

底层原理 一张地图上 500 棵同款树,每棵存完整的模型数据——重复数据存 500 份。享元模式把不变的部分(模型、贴图)抽…

2026-09-25 19:35 996 技术组
高级技巧996引擎

【高级技巧】桥接模式:两个维度的独立扩展封装

底层原理 技能系统按"元素×形态"组合:火球冰球乘单体群攻——每加一种元素或一种形态,组合数量乘性增长(4 元素 3 形态 …

2026-09-25 19:35 996 技术组
策划架构996引擎

【策划架构】期货系统:稀缺物资的期货交易设计

设计初衷 稀缺产出(强化石、晋级材料)的供需错位:产出季价格崩盘、断供季价格飞天——剧烈波动伤害生产者与消费者两端。期货交易…

2026-09-25 19:35 996 技术组
进阶实战996引擎

【进阶实战】傀儡机关:巡逻守卫的三态行为封装

业务场景 驻地巡逻 AI 只会沿固定路线走:玩家摸清路线后绕行如入无人之境。傀儡机关封装:机关傀儡按"巡逻、警戒、袭扰"三态…

2026-09-25 19:35 996 技术组