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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|