[Unity3D]通用对象池类ResourcePool<T>

本文介绍了一个Unity3D的通用对象池类ResourcePool<T>,该类能保持常用对象在池顶部,超出门限的对象会被移除并触发回调函数,允许对移除对象进行额外操作。此外,还支持通过命名来查找和删除对象。
摘要由CSDN通过智能技术生成

通用对象池,使用时会将常用的对象至于池顶,如果设置了池的大小,超出池的未经常使用的对象将被移除,并且执行回调,可在回调中对移除对象进行其他操作。
可对压入的对象进行命名,通过名字来进行查找和删除。

源码

using System.Collections;
using System.Collections.Generic;
using System;
using System.Linq;

namespace XM.Tool
{
    public class ResourcePool<T> : IEnumerable<ResourcePool<T>.ResInfo> where T : class
    {
        public class ResInfo
        {
            public string path;
            public T res;

            public ResInfo(string p, T r)
            {
                path = p;
                res = r;
            }

            public bool HasRes()
            {
                return res != null;
            }
        }

        private Action<List<ResInfo>> _onRemove;
        private int _poolMaxSize = 0;
        private List<ResInfo> _poolLst = new List<ResInfo>();
        //public List<ResInfo> Pool { get { return _poolLst; } }
        public int PoolMaxSize { get { return _poolMaxSize; } }
        public int PoolSize { get { return _poolLst.Count; } }


        public ResourcePool(Action<List<ResInfo>> onRemove = null, int maxSize = 0)
        {
            _onRemove = onRemove;
            _poolMaxSize = maxSize;
        }

        ~ResourcePool()
        {
            //
            Clear();
        }

        public void SetRemoveCallback(Action<List<ResInfo>> onRemove)
        {
            _onRemove = onRemove;
        }

        /// <summary>
        /// 设置大小
        /// </summary>
        /// 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值