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

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

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

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

         }

     }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jether

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值