我尝试了在cocos creator 编辑器(3.8.7)中增加Label组件,选择fnt字体后,当前场景勾选auto release assets,但是退出当前场景后,使用chrome还是看到fnt相关资源在内存中,onDisable中使用assetManager.releaseAsset(font);也不行
使用动态加载,结束后使用assetManager.releaseAsset(font);也还是不行
请问字体资源是不是无法清除干净?虽然占内存不大
我尝试了在cocos creator 编辑器(3.8.7)中增加Label组件,选择fnt字体后,当前场景勾选auto release assets,但是退出当前场景后,使用chrome还是看到fnt相关资源在内存中,onDisable中使用assetManager.releaseAsset(font);也不行
使用动态加载,结束后使用assetManager.releaseAsset(font);也还是不行
请问字体资源是不是无法清除干净?虽然占内存不大
你的字体是如何加载的。
动态还是静态
动态的话还是依赖自己去管理资源缓存
静态加载的话 auto release assets 就行了
您好,我都测试过,都不行。比如最简单的静态加载,在勾选auto release assets后,在切换进入这个场景和退出该场景后,使用chrome的memory snap看,还是有字体资源的残留,具体为这个fnt字体的
cc.ImageAsset(有大小,多少kb),ccTexture2D(0kb)类型的资源残留
您的意思是要调用decRef?这个我没试过,不过下列代码我试了,无法清除
try {
console.log(🗑️ 开始释放 ${resourceName} 字体资源);
// 释放纹理
if (font.spriteFrame?.texture?.isValid) {
assetManager.releaseAsset(font.spriteFrame.texture);
console.log(`✅ ${resourceName} 纹理已释放`);
}
// 释放 SpriteFrame
if (font.spriteFrame?.isValid) {
assetManager.releaseAsset(font.spriteFrame);
console.log(`✅ ${resourceName} SpriteFrame已释放`);
}
// 释放字体本身
assetManager.releaseAsset(font);
console.log(`✅ ${resourceName} BitmapFont已释放`);
} catch (error) {
console.warn(`⚠️ 释放 ${resourceName} 时出错:`, error);
}