博客

群星,我的归宿

Android与Cocos2d-x开发中的缓存池

缓存就像写作业前,把相关的资料和工具摆到桌面上一样,这样会比真正要用到的时候再去取要方便。生活中这样的例子挺多的,在软件领域,实现缓存机制的地方笔者接触到了两个非常类似的,一个是Android开发中,使用ListView的Adapter,渲染每个item时用到的ViewHoder,另外一个是Cocos2d-x开发游戏时,缓存的怪物对象。

Android

Android中ListView渲染item时,需要在每个item里面创建view。当屏幕向上滚动的时候,新的item会从底部出现,此时需要创建新的view来显示新的数据,与此同时,屏幕顶部消失的item中的view会被回收掉,这样当然没有任何问题,可是如果涉及到大量item需要显示,在快速滚动屏幕的时候,就需要非常频繁的创建view对象并销毁不用的view对象,对内存的消耗非常大,而且何必呢?其实每个item的view都是类似的,不同的只是数据,我们并不需要对view做频繁的创建与销毁操作,只用将新的数据绑定到不再使用的view上面就可以,然后把穿上新衣服的view出现在用户的屏幕上。

有点像电影的里面一人饰演多个角色,从屏幕上消失了一会儿,换了个造型又出来演。缓存池也是这么个意思。

Cocos2d-x

游戏开发中,有时候会有大量的怪物从屏幕上消失(死亡)或者出现(复活、刷新),当然不可能每个怪都是new出来的,很多时候只是设置了一下参数,就让怪物从屏幕上不可见(死亡)或者出现(刷新)。内存中真正存储的怪物对象可能就只有10个左右,但是给用户的感受就是会有源源不断的怪物在被杀死后再出现了。

现在突然想想,杀死游戏中怪物的时候只是干掉了一些数值(生命值),刷新出来的怪物在内存里面都是同样一段地址呢。。。

Comments