还是内存问题,求教

在一个场景中,例如我有一个商城界面的prefab,我加载prefab,然后销毁 – 循环操作,
内存只会增加, 我destory后内存也不减少 是为什么?

版本是1.4rc3

内存只会加 不会减

或者切换场景,2个场景之间不停的切换,勾选了自动释放资源,内存还是会一直涨涨涨。。 而且我在加载prefab的地方加了 cc.loader.setAutoReleaseRecursively(prefab, true)

prefab你怎么释放的啊?

cc.loader.setAutoReleaseRecursively(prefab, true) 每次加载我都会加这句代码,这样对不对?

不是,我是说你怎么释放资源的,就只有这一句代码来释放吗?

什么怎么释放呀。 加了这句代码资源不是就随着切换场景自动释放了吗? 我是切换场景 内存不减

你prefab是用loadRes加载的还是属性检查器里引用的?如果是通过loadRes加载的,需要手动调用release来释放

不是把。。 我每次都要加载很多prefab,难道在切换场景的时候我都要一一自己手动释放吗。。 那上面那个函数的作用是什么你知道吗?cc.loader.setAutoReleaseRecursively

额,不好意思,我看错了:joy:只是因为我的项目里有动态加载的地方(主要是atlas)都是手动release,没有出现内存增长的情况

1赞

能否简单说下如何手动release呀? 比如怎么记录哪些是动态加载的资源?

这是我的release代码

            var clips = this.wear.getComponent(cc.Animation)._clips;
            cc.loader.releaseAsset(this.wear.getComponent(cc.Sprite).spriteFrame);
            cc.log("before = " + "atlas/" + this._wear)
            for (var key in clips) {
                if (clips.hasOwnProperty(key)) {
                    var element = clips[key];
                    var temp = cc.loader.getDependsRecursively(element);
                    cc.loader.release(temp);                              
                }
            }
            clips.splice(0, clips.length);                    
            cc.loader.releaseRes("atlas/" + this._wear, cc.SpriteAtlas);

主要是释放animation里所有的spriteFrame,直接释放animation是不行的,动态加载的资源的话,应该只有自己记录,不需要的时候释放,其实我对内存这些东西不是很了解,以上代码是在panda 老师和 jare老师的指教下写出来的

我场景里有很多动态加载的sprite、prefab、json、dragonbone, 我怎么才能手动释放这些。。 每一个相对完整的说法吗。。 这样1个1个手动去搞。 不是坑爹吗。。。

不是说没有好办法,解决方案问问 @panda 和@jare

这个wear是个prefab ?
var temp = cc.loader.getDependsRecursively(wear);
这样不能把动画释放了么?
要一个一个动画去释放?

哭了。 这样还不如以前的引用计数,autoRealease方案。 搞来搞去 内存还是只增不减。。有没有一个相对完整点的内存解决方案呀。。

wear就是一个普通的节点

不是很清楚,我是遍历释放clip

等会儿我越说越乱,容易让人误会,具体等官方大神解答吧,就当我放屁吧:joy:

问下 setAutoReleaseRecursively(xxx._uuid)到底有没有用? @panda

别沉啊。。。

没用 内存问题 建议你做好这方面的研究之后 再决定是不是要用cocos creator