Cocos Creator 3.x 源码剖析:延迟销毁机制与场景切换资源管线
2026/9/6 0:37:13 网站建设 项目流程

引言:内存只涨不跌的根源在生命周期

场景切换后内存只涨不跌、destroy 过的节点两帧后又被访问抛空引用——这些事故的根源藏在对象生命周期管理里。Cocos Creator 不采用同步销毁,而是"延迟销毁 + 引用清理 + isValid 守卫"的组合设计。理解这套机制,是排查内存与空引用问题的前提。

一、延迟销毁:三阶段状态机

1.1 为什么不同步销毁

同步清理引用图是不安全的:Node A 持有 B、B 经事件反向持有 A,同步遍历销毁会把一方先置空,后续清理访问空引用。引擎的解法是把销毁拆成三阶段:

  1. 标记阶段destroy()仅设置待销毁标志并触发预销毁钩子,对象仍然存活;
  2. 收集阶段:帧调度中统一遍历待销毁对象,递归清理子节点、解除父子链接;
  3. 释放阶段:释放组件实例、事件监听与 GPU 资源。
// destroy 入口:标记而非立即清理 public destroy(): boolean { if (this._activeInHierarchy) { this._onPreDestroy?.(); } return super.destroy(); // 设置待销毁标记 } // 帧调度中统一处理待销毁对象 public tick(deltaTime: number) { this._destroyDirty(); //

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询