使用cc.loader.load后,如何清除之前的缓存?(非图片)

平台:native

我的操作流程:

1 我设置了 jsb.fileUtils.setSearchPaths(‘下载路径/’ , ‘程序包里/’); 让程序优先读取下载路径的资源
2 我使用cc.loader.load读取了一个test.json。 路径: 程序包里/‘resources/test.json’
3 我下载了一个json, 路径 : 下载路径/‘resources/test.json’
4 不杀死程序,再次读取该json, 读到的结果还是原来的json,不是新下载的那个json。
5 杀死程序,重新读取json,读到了下载的test.json。

这里不杀死程序,我下载的资源没办法直接更新。

我的需求是图片,场景,prefab,json等,下载了新的资源后,只要再次进入场景就更新,而不是重启游戏才更新。
所以这里的缓存如何清除?求助。

1赞

cc.loader.release

http://cocos.com/docs/creator/scripting/load-assets.html#--7
http://cocos.com/docs/creator/api/classes/loader.html#method_release

我的需求并不是马上释放资源,而是下次我再次读取该资源的时候,不在读取缓存,而是重新加载。

在Loading-Items里面有个方法

JS.mixin(LoadingItems.prototype, CallbacksInvoker.prototype, {

append: function (urlList, owner) {
    if (!this.active) {
        return [];
    }

    this._appending = true;
    var accepted = [], i, url, item;
    for (i = 0; i < urlList.length; ++i) {
        url = urlList[i];

         如果有缓存,url['content'] 就会有值。
         ///////
       
    }
   ........
}

}

使用 Pipeline/removeItem:method 可以实现吗?

用 release 就可以了,对于非贴图资源来说,用 release 只是从 loader 中删除缓存引用,并不会真正释放这个对象,实际上也做不到释放,一个 JS 对象只要还有外部引用,就不会被释放。

我对贴图,json,prefeb,scene,都会有类似的操作。release的方法我看了说明,是有可能删除正在引用的图片导致场景的图片变黑。所以我应该区分开,图片的可以使用Pipeline/removeItem,其他的prefab,scene,json,我都使用release。我这么理解对吧。

另外,有一些资源我并不是使用cc.loader.load读取的,比如场景我是使用cc.director.loadscene()。而此场景里面某些资源可能被我下载的资源替换了。但是我并不知道他们的名字和id,此时如何删除缓存?

cc.loader.release 接受资源 asset 对象和 uuid,所以传入 cc.Prefab, cc.Texture2D, cc.SpriteFrame, cc.SpriteAtlas 等都是可以被释放掉的

1赞

求问Pipeline/removeItem:method怎么用,有没有详细一点的说明。

pipeline/removeItem怎么用,没看到有例子。。
注释也看起来稀里糊涂的

老大,使用cc.loader.load 加载的包体外,设备内的资源 ,不知道要怎么释放了


上图中的两个log对应

是不能用 getDependsRecursively 这个方法么

这样也不行·····

cc.loader.releaseRes 根本释放不了图片对象,cc.FarmSprite 对象还在内存中,内存一点不减小,咋回事啊。