Unity基于栈,Func和Action实现对象池方案

背景

在开发过程中,可能会反复操作某个对象,但是每次加载,实例出对象,有点耗时,此时引入对象池方案。

应用

游戏开始时,会预先实例出对象,用到的时候可以直接取,用完后压入栈中,等待下次使用。

核心代码

创建并压入栈中:

 private  PoolBase(Func<T> creatFunc, Action<T> onGet, Action<T> onPut, Action<T> onDestroy, int initSize = 32)
    {
        _initSize = initSize;
        _creatFunc = creatFunc;
        _onGet = onGet;
        _onPut = onPut;
        _onDestroy = onDestroy;
        _objStack = new Stack<T>(initSize);
        CreateNewItem(_initSize);
    }

    private void CreateNewItem(int size)
    {
        for (var i = 0; i < size; i++)
        {
            Put(_creatFunc());
        }
    }

获取栈中对象(没有的时候自动扩展):

public T Get()
    {
        if (_objStack.Count <= 0)
        {
            Expand();
        }
        var obj = _objStack.Pop();
        if (_onGet != null)
            _onGet(obj);
        return obj;
    }

需要可自取,Demo_009
链接:https://pan.baidu.com/s/1CP4FLttldNHW-gW2zUrlDA
提取码:ncv6

posted @ 2020-11-26 15:56  低小调  阅读(138)  评论(0编辑  收藏  举报