Creator是否真的存在资源内存管理?

思路清奇,连节点都有子父之分,你是连文档都没看过吧,找别人讨论吧

可能是我太笨没看懂,所以我才有此疑问前来请教。那么请问出现我说的上面的情况时,具体是怎么处理的呢?

放心用,我们游戏都上线了,资源加载释放没有问题。游戏算中重度,

直接使用引用计数来管理资源就成么?

这个情况除非你手动去释放了,不然不会出现

https://docs.cocos.com/creator/manual/zh/asset/release-manager.html
文档说的专业又清楚

我说的就是手动释放的情况,如何去管理那些资源能被释放的问题。

我给精灵帧加了引用后,打印纹理引用计数并没有增加。所以我才有此疑问

我不知道你怎么用的,反正我们项目是直接加载的spriteFrame,正常人也不会去跳过父资源直接去释放子资源,这样做只会出现报错,卡死

一般正常人不都是要持有什么资源都加一个引用计数么,比如某精灵帧。然后再不需要时区减引用计数。再需要释放时手动释放一下。那么如果我持有了精灵帧这个资源,但没有添加对纹理的持有。此时会不会因为纹理计数先到0后,它被手动释放掉了呢?

你加载了资源A,资源A又用到了资源B,引擎自己会给资源B加引用计数
你又一万个地方用到了资源A,给资源A加了一万次引用计数,资源B的计数都不会变
你把资源A的计数减少到0,资源A会自动释放,同时给资源B的计数-1,资源B也就释放了

用引用计数的好处就是,你不需要手动释放
话说你真的有把文档读一次么

1赞

这就是不看文档的结果,会看图吧?别找我了,我回答不了图片都理解不了的人

1赞

也就是说这个方案中对B资源进行操作得小心些才行,如果不小心对B资源减扣到0就会提前释放掉了

你是如何操作能把B资源扣减到0的呢

你如果看不懂文档里的原理,那就不要去管它,你只要记得,你用到了哪个资源,就对哪个资源的计数+1,你不用了就-1,引擎会自己去释放的
间接引用的资源你不用管

或者你换个思路,你游戏控制一下美术量,直接不管内存释放的事情,也不会有事情的

那是不是说,最底层的资源我们都不用考虑,只用考虑直接使用的资源就好。这样就可以做到完美释放

是的————————

搞不懂了
直接在编辑器加了个精灵,设置Frame不设置Atlas(这个spriteframe属于某个atlas),assetManaget.assets里面spriteFrame的refcount是1,atlas不在里面
这时候destory这个精灵,assetManaget.assets里面spriteFrame的refcount还是1

destory精灵并不会操作引用计数,引用计数是要自己去手动操作的

你这个帖子里的东西,文档都描述的很详细。。。。。你还是仔细阅读下比较合适

我之前用加载SpriteAtlas后,用它创建了一个精灵帧,然后我在使用releaseUnusedAssets释放了没使用的资源。然后在用纹理集创建精灵帧就会崩掉,经过你们的解释后,我才知道我理解错了。创建精灵帧并不会将创建它的纹理集的引用增加,只会增加它使用纹理的引用计数。所以释放后,纹理集资源就没了。感谢你们的耐心回复,让我更好的理解了里面的机制。

之前加载精灵集后,通过精灵集获取精灵帧,我就以为精灵集是父资源,所以理解成它创建精灵帧后,精灵集的引用计数会增加。看了大佬你们的讲解后结合数据才发现,我理解错了。感情是精灵集只是管理了精灵帧它们并不是父子关系。再次,再次感谢大佬们的耐心讲解。