Cocos Creator 3.x 源码剖析:延迟销毁机制与场景切换资源管线 📅 2026/8/17 20:18:23 引言:内存只涨不跌的根源在生命周期场景切换后内存只涨不跌、destroy 过的节点两帧后又被访问抛空引用——这些事故的根源藏在对象生命周期管理里。Cocos Creator 不采用同步销毁,而是"延迟销毁 + 引用清理 + isValid 守卫"的组合设计。理解这套机制,是排查内存与空引用问题的前提。一、延迟销毁:三阶段状态机1.1 为什么不同步销毁同步清理引用图是不安全的:Node A 持有 B、B 经事件反向持有 A,同步遍历销毁会把一方先置空,后续清理访问空引用。引擎的解法是把销毁拆成三阶段:标记阶段:destroy()仅设置待销毁标志并触发预销毁钩子,对象仍然存活;收集阶段:帧调度中统一遍历待销毁对象,递归清理子节点、解除父子链接;释放阶段:释放组件实例、事件监听与 GPU 资源。// destroy 入口:标记而非立即清理 public destroy(): boolean { if (this._activeInHierarchy) { this._onPreDestroy?.(); } return super.destroy(); // 设置待销毁标记 } // 帧调度中统一处理待销毁对象 public tick(deltaTime: number) { this._destroyDirty(); //