| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | 
							- using UnityEngine;
 
- using System.Collections.Generic;
 
- using FairyGUI.Utils;
 
- namespace FairyGUI
 
- {
 
-     /// <summary>
 
-     /// GObjectPool is use for GObject pooling.
 
-     /// </summary>
 
-     public class GObjectPool
 
-     {
 
-         /// <summary>
 
-         /// Callback function when a new object is creating.
 
-         /// </summary>
 
-         /// <param name="obj"></param>
 
-         public delegate void InitCallbackDelegate(GObject obj);
 
-         /// <summary>
 
-         /// Callback function when a new object is creating.
 
-         /// </summary>
 
-         public InitCallbackDelegate initCallback;
 
-         Dictionary<string, Queue<GObject>> _pool;
 
-         Transform _manager;
 
-         /// <summary>
 
-         /// 需要设置一个manager,加入池里的对象都成为这个manager的孩子
 
-         /// </summary>
 
-         /// <param name="manager"></param>
 
-         public GObjectPool(Transform manager)
 
-         {
 
-             _manager = manager;
 
-             _pool = new Dictionary<string, Queue<GObject>>();
 
-         }
 
-         /// <summary>
 
-         /// Dispose all objects in the pool.
 
-         /// </summary>
 
-         public void Clear()
 
-         {
 
-             foreach (KeyValuePair<string, Queue<GObject>> kv in _pool)
 
-             {
 
-                 Queue<GObject> list = kv.Value;
 
-                 foreach (GObject obj in list)
 
-                     obj.Dispose();
 
-             }
 
-             _pool.Clear();
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         public int count
 
-         {
 
-             get { return _pool.Count; }
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <param name="url"></param>
 
-         /// <returns></returns>
 
-         public GObject GetObject(string url)
 
-         {
 
-             url = UIPackage.NormalizeURL(url);
 
-             if (url == null)
 
-                 return null;
 
-             Queue<GObject> arr;
 
-             if (_pool.TryGetValue(url, out arr)
 
-                 && arr.Count > 0)
 
-                 return arr.Dequeue();
 
-             GObject obj = UIPackage.CreateObjectFromURL(url);
 
-             if (obj != null)
 
-             {
 
-                 if (initCallback != null)
 
-                     initCallback(obj);
 
-             }
 
-             return obj;
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <param name="obj"></param>
 
-         public void ReturnObject(GObject obj)
 
-         {
 
-             if (obj.displayObject.isDisposed)
 
-                 return;
 
-             string url = obj.resourceURL;
 
-             Queue<GObject> arr;
 
-             if (!_pool.TryGetValue(url, out arr))
 
-             {
 
-                 arr = new Queue<GObject>();
 
-                 _pool.Add(url, arr);
 
-             }
 
-             if (_manager != null)
 
-                 obj.displayObject.cachedTransform.SetParent(_manager, false);
 
-             arr.Enqueue(obj);
 
-         }
 
-     }
 
- }
 
 
  |