zoukankan      html  css  js  c++  java
  • 对象池的应用实例

    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游戏开发中,内存问题基本是开发者最为头疼的了,官方也没具体的内存优化指导,开发者只能自己摸索着。显示列表的层级removechild、事件监听的及时移除或者弱引用。这些都是对于内存问题要注意的,因为AS3的垃圾回收机制并不是那么‘勤劳’的,垃圾回收只会在特定的时刻,或者是内存达到一定的瓶颈时才会进行。所以开发者要特别注意开发细节上的处理来节省内存。对象池是一个很好的方法。

    比如在制作子弹射击的时候,子弹每次都被new出来。这样肯定很消耗内存。如果子弹new出来后屏幕上不需要这颗子弹了。可以将其放入对象池中。再次new的时候可以重复利用。

    我写了一个对象池的类。这个类是单例的。用的是dictionary集合来进行的存储对象。KEY就是对象的包名+类名,所对应的是一个array数组。里面存放着可重复利用的对象

    用 一个push方法来放入对象

    用一个 pop方法来取出需要的对象。

  • 相关阅读:
    软件工程团队作业2.1——《业务流程模型》
    软件工程团队作业1——《调研提纲》
    2020软件工程第四次作业
    作业四(一)
    17074230 团队项目选题报告
    计算与软件工程 作业5
    计算与软件工程 作业4
    17074230 第三次作业
    17074230 第二次作业
    17074230 赵雅雅 第一次作业
  • 原文地址:https://www.cnblogs.com/AS30/p/2194611.html
Copyright © 2011-2022 走看看