对象池可以用于优化代码,提高代码效率。
这里我提供了一种简单的技巧。
查阅一下代码,把函数内的、函数开头的所有定义引用变量+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;
}
}
}