[资源管理]代码赋值资源管理

前言

在前几天做了一次友好的学术交流,在这次交流中,对方提出了一种关于资源管理的新的思路,就是自己管理asset直接释放ab。我在事后想了一下,感觉这个能省一部分的内存,但是其中的坑还是有点的,所以现在就能写一篇文章来介绍这个方案。

正文

方案

在这套方案里,我们在加载好asset的之后,我们就可以调用unload(false)把ab给卸载了,然后通过resource.unload(asset)把这个资源卸载掉,那这样的好处在哪里呢?这样的好处就在我们可以在内存中减少一部分的ab的内存。

注意点

  1. 在我上一期关于资源管理的文章上说过,我的最后一套方案对于ab的卸载还是要基于ab的依赖关系进行的。那是因为如果不做ab的依赖管理卸载,那如果ab还没卸载,但是它所依赖的ab被卸载了,那下一次再加载依赖的时候,它就没办法被自动依赖赋值上prefab上的。所以我们在使用这套方案的时候,ab是不会被ab包所依赖的
  2. 如果这个资源被ab包所依赖,那还会产生一个问题,当我们调用false卸载资源之后,下一次加载ab包的asset的时候,它所依赖的资源也被加载出来了,那这个依赖的asset就会被重新创建一个。出现内存的冗余资源。

结论

所以我们在使用这个方案的时候,最好就是为了一些头像icon这类的texture资源,然后通过我们手动维护这个asset的生命周期,这样能少一部分内存。而且icon这类资源基本上都是使用我们代码赋值的。使用这个方案的资源一定不能被ab所依赖。