举一个例子,有一个场景里有一堆怪物,你需要把这堆怪物保持在一定数量区间内(15-20)来供玩家攻击。每隔几秒生成一个怪物但不能超过20个,如果少于15个则立即生成。
有些人可能缺怪物的时候就new一个,怪物被打死的时候就直接delete掉。这就导致了频繁的申请和释放内存,这样做的效率是很低的。
高效的解决方案就是创建一个怪物的对象池。因为对象池会保存你创建出来的对象并且重复使用它,上述例子里如果使用对象池最多只会new20次,并且不会delete。效率自然就上去了。
下面介绍一下对象池。
1:对象池一般有会两个链表。一个是idle链表,一个是busy链表(就是创建一个类,里面有两个链表)。
2:对外的接口一般有取出对象和回收对象两个。
3:当你调用取出接口的时候,对象池会从idle里面拿出来一个返回给你并且把这个对象从idle里面删除掉添加到busy里。如果对象池发现idle是空的,对象池就会创建一个对象。然后把对象反给你并且把对象添加到busy里。
4:当你调用回收接口的时候(注意把你要回收的对象传进去),对象池会把要回收的对象放到idle里并且从busy里移除掉。
这就是简单的对象池。看上去是不是很简单?但是你要重置对象池里对象的数据还是很难控制的。
欢迎转载,转载请标明出处
网友评论