对象池可以用于优化代码,提高代码效率。
这里我提供了一种简单的技巧。
查阅一下代码,把函数内的、函数开头的所有定义引用变量+new对象的代码找到,然后从对象池中pop出来,再在函数结尾中把对象再push进去。
如果是只有函数内的一段代码用到,比如一个循环里边的变量,那就可以在循环里边用这个,在结尾处把对象push进去。
把代码中修改的所有的new对象,都在对象池的构造器中直接new一遍然后放入对象池中。其实这件事情不做也可以。
以下贴上一个网上找的AS3的对象池(http://www.cnblogs.com/AS30/archive/2011/09/28/2194611.html):
package{ import flash.utils.Dictionary; import flash.utils.getDefinitionByName; import flash.utils.getQualifiedClassName; /** * 用于显示对象的对象池类 * @author yanghongbin * */ public class DisplayObjectPool { private static var
instance:DisplayObjectPool; /** * 作为对象池的词典dict */ private var objPoolDict:Dictionary =
new Dictionary(); public function DisplayObjectPool() { } public static function
getInstance():DisplayObjectPool { if (instance == null) { instance = new
DisplayObjectPool(); } return instance; } /** * 向对象池中放入对象,以便重复利用 * @param disObj 要的放入对象 * */ public function push(oldObj:Object):void { var objName:String
= getQualifiedClassName(oldObj); if (oldObj == null) { return; } if (this.objPoolDict[objName] ==
null) { this.objPoolDict[objName] = []; } this.objPoolDict[objName].push(oldObj); } /** * 从对象池中取出需要的对象 * @param targetObj 需要的对象类类名,没必要必须是类实例名 类名就可以
* @return 取出的相应对象 * */ public function pop(targetObj:Object):Object { var objName:String
= getQualifiedClassName(targetObj); trace(objName); if (this.objPoolDict[objName] !=
null && this.objPoolDict[objName].length >
0) { return this.objPoolDict[objName].pop()as
Object; } var objClass:Class = getDefinitionByName(objName)
as Class; var obj:Object
= new objClass as Object; return obj; } }}
本文介绍了一种使用对象池来优化代码效率的方法,并提供了一个AS3实现的对象池类示例,该方法通过重用对象避免频繁创建和销毁,从而提高程序性能。

被折叠的 条评论
为什么被折叠?



