Ejemplo n.º 1
0
    // 返回值表示是否是new出来的对象,false则为从回收列表中重复使用的对象
    public IClassObject newClass(out bool isNewObject)
    {
        mListLock.waitForUnlock();
        isNewObject = false;
        IClassObject obj = null;

        // 先从未使用的列表中查找是否有可用的对象
        if (mUnusedList.Count > 0)
        {
            foreach (var item in mUnusedList)
            {
                obj = item;
                break;
            }
            mUnusedList.Remove(obj);
        }
        // 未使用列表中没有,创建一个新的
        else
        {
            obj = createInstance <IClassObject>(mType);
            // 创建实例时重置是为了与后续复用的实例状态保持一致
            obj.resetProperty();
            isNewObject = true;
        }
        obj.setAssignID(++mAssignIDSeed);
        obj.setDestroy(false);
        // 添加到已使用列表
        mInusedList.Add(obj);
        mListLock.unlock();
        return(obj);
    }
Ejemplo n.º 2
0
    // 返回值表示是否是new出来的对象,false则为从回收列表中重复使用的对象
    public IClassObject newClass(Type type, out bool isNewObject)
    {
        isNewObject = false;
        if (!isMainThread())
        {
            logError("只能在主线程中使用此对象池,子线程中请使用ClassPoolThread代替");
            return(null);
        }
        if (type == null)
        {
            return(null);
        }
        IClassObject obj = null;

        // 先从未使用的列表中查找是否有可用的对象
        if (mUnusedList.TryGetValue(type, out HashSet <IClassObject> classList) && classList.Count > 0)
        {
            foreach (var item in classList)
            {
                obj = item;
                break;
            }
            classList.Remove(obj);
            isNewObject = false;
        }
        // 未使用列表中没有,创建一个新的
        else
        {
            obj = createInstance <IClassObject>(type);
            // 创建实例时重置是为了与后续复用的实例状态保持一致
            obj.resetProperty();
            isNewObject = true;
        }
        obj.setAssignID(++mAssignIDSeed);
        obj.setDestroy(false);
        // 添加到已使用列表
        addInuse(obj);
        return(obj);
    }