反馈一个 cocos 3.8 spine 内存泄漏问题。 官方看一下

cocos 3.8 使用 spine 3.8 的时候, Atlas 和 AtlasAttachmentLoaderExtension 对象没有被释放。
使用 spine 4.2 时, Atlas 没有释放。

下面直接贴代码了。

先看 Atlas 的泄漏。
从这里可以看到 Atlas 被 new 出来之后,只是交给了 AttachmentLoader,后续没有其他操作了。
而 AttachmentLoader 相关的代码,没有 delete atlas. 所以导致 atlas 的内存泄漏。

再看 AttachmentLoader

  • 在 spine 3.8 版本中, 两种 spine 解析器在使用 loader 作为构造函数参数的情况下,_ownsLoader 都是 false。 在释放的时候,不会释放 _attachmentLoader, 导致内存泄漏。
  • 在 spine 4.2 版本中,_ownsLoader 传了 true, 这块没有问题
1赞

修改方法有两种思路
第一种简单粗暴,在 readSkeletonData 之后,直接 delete atlas; delete attachmentLoader; 就行。亲测没有bug.
第二种是针对 atlas 根据内容做缓存,当所有使用它的 skeletonData 都释放之后再释放。 维护成本比较高。

请教一下你是怎么跟踪内存确保它是被释放掉了的?

让 ai 在相关对象的 new 和 delete 中增加了计数统计。然后在问题出现的时候,在控制台调用函数 dump 出日志。再喂给 ai 分析。

好的,谢谢

他们都跑去搞PinK去了,哪有时间修复哦

现在重心都在pink,其他基本不管了

所以我本地针对自己用的引擎版本已经修改了。引擎里版本太多,我也没那动力去推 PR。
这里主要是分享一下这个坑,给后人一个思路。

怕是没有官方了

3.x已死,有事烧纸。