3.7.3

首先我destroyAllChildren了所有。并且destroy了这个节点
还release这个预制体。
这个节点是一个预制体(预制体上拖了一个spine)
然后通过cc.assetManager.assets._map
来打印所有加载数据发现这个预制体使用的spine文件图片
ImageAsset和Texture2D没有清理掉他们的引用计数还有1
SpriteFrame好像没有了
这种情况正常么。是否有内存泄漏
这3者有什么区别。

3.7.3

首先我destroyAllChildren了所有。并且destroy了这个节点
还release这个预制体。
这个节点是一个预制体(预制体上拖了一个spine)
然后通过cc.assetManager.assets._map
来打印所有加载数据发现这个预制体使用的spine文件图片
ImageAsset和Texture2D没有清理掉他们的引用计数还有1
SpriteFrame好像没有了
这种情况正常么。是否有内存泄漏
这3者有什么区别。

资源之间也有依赖关系。并由系统自动维护。你只需要关心你加载的时候加载出了什么资源,并管理好它的引用计数就行
在 Cocos Creator 中, ImageAsset 、 Texture2D 和 SpriteFrame 是资源类型,它们之间的关系非常紧密,主要用于处理和展示游戏中的图像资源。下面是它们的定义及关系:
ImageAsset 是图像文件的资源类型,它代表了一个图像文件的原始数据。在 Cocos Creator 中,当你导入一个图像文件(如 PNG、JPG)时,它会被创建为一个 ImageAsset 实例。Texture2D 是一个二维纹理资源,它基于 ImageAsset 的数据创建。 Texture2D 将 ImageAsset 的数据上传到 GPU,使其可以被渲染到屏幕上。SpriteFrame 是一个关键的资源类型,用于2D游戏开发。它包含了一个引用到 Texture2D 的纹理,以及描述如何从这个纹理中裁剪出一个矩形区域来表示一个精灵(Sprite)的信息。SpriteFrame 可以被用于 Sprite 组件来显示一个图像的特定部分。它允许开发者从一个大的纹理图集中裁剪出小的图像来使用,这样可以提高性能和资源的复用。关联 :
ImageAsset 是基础,代表了图像的原始数据。Texture2D 基于 ImageAsset ,将图像数据上传到 GPU,用于渲染。SpriteFrame 则是更高级的抽象,它引用 Texture2D 并定义了如何从中裁剪图像来表示一个精灵。 SpriteFrame 可以被用在 Sprite 组件中,用于在场景中显示图像。--------- 以上为来自 GitHub Copilot 的答案 ---------
之前翻阅过源码,Texture2D与SpriteFrame都可以自行构造,如果是自行构造的则必须自行销毁(两者都有对应的destroy方法),否则会造成内存泄漏;如果是引擎内部提供的,则不需要关心,内部会自行释放。