cocos creator 资源引用

最近在做cocos creator2.4.3版本内存优化, 我想当然的是收到系统警告的时候,释放没有使用的资源。调用: cc.assetManager.releaseUnusedAssets();

没有想到,调用这个API后引发了很多问题。 就是正在使用的资源被释放了。

通过断点跟踪到底层,发现引用为<=0 时,资源会被释放。

1。.prefab 文件准备放到内存中时, 引用计数加1,

 

 

2。.prefab 文件加载完成时,引用计数减1,  也就是说预制体的引用计数为0.

 

 

3.  重复项的callback 始终为长度1, 故引用计数为1。

callback = [ {
done: done,
item: item
} ]

4.  cb.done 执行clear.  引用计数0

 

 

 

总之, 在业务层拿到prefab资源对象的时候,引用计数0.   这个原始资源被释放了, 

但是排行场景还在,排行场景里的一个Item是动态创建的。 例如使用 cc.instantiate(rankItemPrefab).   

原始资源释放,rankItemPrefab肯定为null,  由此就引发bug了。 

 

posted @ 2021-06-24 16:37  Please Call me 小强  阅读(418)  评论(0编辑  收藏  举报