这个不算内存泄漏,引擎有引用计数机制来管理资源依赖。
当你调用 clearRes("BagView.lh") 时,PrefabImpl 会被 destroy,这个过程会级联释放它所依赖的子资源(Texture → Texture2D)。如果子资源的引用计数降为 0,会被自动销毁并从 loadedMap 移除。
如果你发现 button.png、checkbox.png 仍然残留,说明它们还被其他资源引用着(比如你在 clearRes 之前已经用 prefab.create() 创建了实例节点,节点上的 GImage 也持有这些纹理的引用)。只要有人还在引用,引擎就不会释放它们——这是正确行为,不是泄漏。
如果你想按模块批量管理资源,可以用 group 机制:
// 加载时指定分组
Laya.loader.load("BagView.lh", { group: "bag" });
// 释放整个分组的所有资源(包括子资源)
Laya.Loader.clearResByGroup("bag");
另外,Laya.Resource.destroyUnusedResources() 可以一次性清理所有引用计数为 0 的资源,适合在切换场景时调用。
以上由 AI 自动回复,仅供参考。若无异议将不再人工审查;如需人工介入请回帖说明。