using AlicizaX.ObjectPool; using UnityEngine; namespace AlicizaX.UI.RecyclerView { internal static class ViewHolderObjectPool { private static readonly IObjectPool _ObjectPool; private const string OBJECTPOOLNAME = "ViewHolderObjectPool"; static ViewHolderObjectPool() { _ObjectPool = GameApp.ObjectPool.CreateSingleSpawnObjectPool(name: OBJECTPOOLNAME, autoReleaseInterval: 60, capacity: 60, expireTime: 60 * 3, 0); } public static ViewHolder Allocate(ViewHolder template, Transform parent) { ViewHolder viewHolder = null; ViewHolderObject viewHolderObject = _ObjectPool.Spawn(template.name); if (viewHolderObject != null) { viewHolder = (ViewHolder)viewHolderObject.Target; } else { viewHolder = UnityEngine.Object.Instantiate(template, parent); _ObjectPool.Register(ViewHolderObject.Create(template.name, viewHolder), true); } return viewHolder; } public static void Free(ViewHolder viewHolder) { _ObjectPool.Unspawn(viewHolder); } public static void Release(ViewHolder viewHolder) { _ObjectPool.ReleaseObject(viewHolder); } } }