动态加载Prefab和纹理释放有问题

1.7正式版
ios 原生
1.项目中使用了cc.loader加载了一些cc.Prefab和cc.SpriteFrame资源,使用正常
但是在释放的时候遇到一些问题:
使用cc.loader通过url加载Prefab->prefab实例化后->添加到场景->调用destroy()->通过加载的url使用如下:
var deps = cc.loader.getDependsRecursively(url); cc.loader.release(deps);
在xcode并没有看到内存回落(观察了很长时间).

而且释放的时候有的资源会有一些警告:
Simulator: JS: "/Users/syuuhi/Developer/Code/Alchemy/library/imports/e9/e9ec654c-97a2-4787-9325-e6a10375219a.json" was released but maybe still referenced by "resources/Prefabs/UI/shop" (type: cc.Prefab, uuid: 58ec55d1-6de7-4cdf-89d6-54bde5488910)

2 . 使用动态加载的资源可以在scene中正常使用,跳转到别的scene的时候(这里会加载该scene会用到的资源),内存明显会回退.但会稍微滞后,两个scene互相切换内存貌似释放正常(都在编辑器里勾选了自动释放),但是现在问题就是在当前scene中加载后的prefab和spriteframe明显是释放不了的.
这个问题很麻烦啊,内存处理不好根本没法用.有没有大佬有解决方案啊,希望官方给个解决办法啊,之前看到有好多相关的帖子,但最后都不了了之.
求关注,求帮顶

更新一下
放上一个demoReleaseTest.zip (1.1 MB),问题很明显


后来等了7分钟内存有回落,但是这期间我再重新加载并add,内存还是会涨并且还会新加载而不是直接利用已加载的资源,也就是说刚才的release只是把加载到的资源列表清理了,但是实际的资源并没有及时释放(主要是这7分钟是不是时间太久了)

1赞

每日一顶

内存问题一直遇到,自己现在也没时间,能力去处理,真的有点麻烦

你打印一下 var deps = cc.loader.getDependsRecursively(url);

我这边得到的 deps只有1条

http://forum.cocos.com/t/1-7-cc-loader-getdependsrecursively/53778/4

这个取决于这个url是什么.如果是预设,预设里又引用多个图片资源,就会是多个,
你说只有一个应该你释放的这个是一张图片吧.也就是cc.SpriteFrame类型的.

每日一顶

每日一顶

按理说是会释放的。你可以做个demo,用1个里面有很多图片的预制来试试。
你先试试,直接释放图片,如果看到显示内容花屏了,应该就是释放成功了。
过段时间,看看内存有没有降低

上面的demo就是这么做的,然而并不能,能帮看看有啥问题吗

@jare 帮忙看看这个

同问,希望有一个详细点的文档说明下

我试了一下,1.7正式版。在浏览器里看net的资源加载,释放后再加载预制,并没有重新加载图片(之前的版本这里是可以看到重新加载的)

但是 ,看cc.loader._cache,里面的图片是被清除掉了。
用 getRes,也获取不到图片。
这样看来,图片是被清除了的。

至于内存 长时间不降低,可能是没有调用gc吧。多调用几次 cc.sys.garbageCollect()试试

这个看官方的解释了。

在释放后调用cc.sys.garbageCollect() 有效果.ios真机测试