碰到一个loadRes api 很奇怪的问题,有简单的demo复现

以下是在谷歌浏览器测试. 事情的经过分为3步:

1>使用loadRes api将一个resources下的json文件读取并存入一个集合中。
2>改变集合的值在其他的地方。
3>再次使用 loadRes api 读取json文件
你会发现3好像失效了. 他读到的值跟集合一模一样。就好像缓存一样。
想了半天不明白为什么。以下是demo. 你可以先点击加载文件,在console界面会打印出内容。再点击 增加集合,然后再点击加载文件按钮,会发现读取的内容跟集合一模一样。

上传中…loadresdemo.zip (245.7 KB)

@jare

loadRes加载的资源会保留在cc.loader的cache中,你的this._list只是引用,因此改变this._list的元素,也就是改变了cache中这个数组的元素。
再次进行cc.loader.loadRes时,由于这个资源已经被load过了,就会直接取cache中的给到你。因此你会发现再加载得到的内容中有新增的元素。

解决办法:
方案1、json加载后进行深拷贝后再使用
方案2、再次加载前使用cc.loader.releaseRes(“level”),释放掉之前的资源,然后再进行重新加载

谢谢,,,