com.alicizax.unity.ui.exten.../Runtime/RecyclerView/ViewHolder/ViewHolderObjectPool.cs

44 lines
1.4 KiB
C#
Raw Normal View History

2025-04-01 15:21:02 +08:00
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()
{
2025-04-01 16:26:51 +08:00
_ObjectPool = GameApp.ObjectPool.CreateSingleSpawnObjectPool<ViewHolderObject>(name: OBJECTPOOLNAME, autoReleaseInterval: 60, capacity: 60, expireTime: 60 * 3, 0);
2025-04-01 15:21:02 +08:00
}
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);
}
}
}