Egret引擎关于内存和缓存的疑惑

发表:1年前 更新:1年前 | {{user.city}}

问题

通过 RES.loadGroup 用该方式可以从网络中获取游戏资源,此时这些资源是在内存里还是以文件的形式在某个地方,占不占用内存?
RES.getRes这个是读取已缓存的资源,是否此时才解析文件占用内存呢?
1.通过 RES.loadGroup 用该方式可以从网络中获取游戏资源,此时这些资源是在内存里还是以文件的形式在某个地方,占不占用内存?
RES.getRes这个是读取已缓存的资源,是否此时才解析文件占用内存呢?
2.RES.destroyRes 这个接口可以销毁对应的一组资源或某个资源,如果调用了该接口,但是资源正在被使用,比如某个位图对象仍在显示列表中,那么会有什么效果?
如果有2个group都包含了同一个资源,销毁其中一个group会有什么现象,如果我有2个group "ui1"和"ui2",他们都包含"bg",我创建第一个ui的时候显示loadgroup(ui1)
之后切换界面前创建了ui2,loadgroup("ui2"),然后把ui2加入显示列表,删除了ui1对象并且RES.destroyRes("ui1"),此时会发生什么现象?
因为我打算设计成一个界面对应一个group分组,然后当第二个界面创建完毕的时候销毁第一个界面用到的资源,可是2个group里可能有公用元素。


3.针对第一点的疑惑,如果缓存和内存是分开的,RES.destroyRes的时候是将内存里的资源删除还是将缓存的文件也删除,如果我只想删除内存里的位图,不想删除缓存的文件来避免下次重新从网络获取,我该如何处理呢?

 解决方式

这个问题很多开发者也会疑惑,这里统一回答一下

1、RES.loadGroup完毕的时候你可以理解为已经占用内存,所以RES.getRes 只是获得一个引用而已
2、第二个需求,默认情况下直接使用即可,RES.destroyRes("ui1")并不会销毁另一个组的资源;当然你可以选择强制销毁另一个组的资源,需要使用第二个参数RES.destroyRes("ui1",true)
3、RES.destroyRes 的时候 Egret 内部的内存会被释放掉,但是浏览器缓存还是存在的,也就是说,如果你使用RES.getResByUrl 的话,其实不用重新加载而是直接从浏览器缓存中直接获得
signature
买点土豆回去炒马铃薯吧
评论

无权限

请登录后评论