使用对象池优化代码的一种技巧

对象池可以用于优化代码,提高代码效率。

这里我提供了一种简单的技巧。

查阅一下代码,把函数内的、函数开头的所有定义引用变量+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;

        }

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章