44 lines
1.4 KiB
C#
44 lines
1.4 KiB
C#
|
using AlicizaX.ObjectPool;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace AlicizaX.UI.RecyclerView
|
||
|
{
|
||
|
internal static class ViewHolderObjectPool
|
||
|
{
|
||
|
private static readonly IObjectPool<ViewHolderObject> _ObjectPool;
|
||
|
private const string OBJECTPOOLNAME = "ViewHolderObjectPool";
|
||
|
|
||
|
static ViewHolderObjectPool()
|
||
|
{
|
||
|
_ObjectPool = GameApp.ObjectPool.CreateSingleSpawnObjectPool<ViewHolderObject>(name: OBJECTPOOLNAME, autoReleaseInterval: 60, capacity: 60, expireTime: float.MaxValue, 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);
|
||
|
}
|
||
|
}
|
||
|
}
|