// 返回值表示是否是new出来的对象,false则为从回收列表中重复使用的对象 public bool newClass(out IClassObject obj, Type type) { bool isNewObject = false; obj = null; // 锁定期间不能调用任何其他非库函数,否则可能会发生死锁 mListLock.waitForUnlock(); try { // 先从未使用的列表中查找是否有可用的对象 if (mUnusedList.ContainsKey(type) && mUnusedList[type].Count > 0) { obj = mUnusedList[type].Pop(); isNewObject = false; } // 未使用列表中没有,创建一个新的 else { obj = createInstance <IClassObject>(type); isNewObject = true; } // 添加到已使用列表 addInuse(obj); } catch (Exception e) { logError(e.Message); } mListLock.unlock(); // 重置实例 obj?.resetProperty(); return(isNewObject); }
// 返回值表示是否是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); }
public void destroyClassReally(IClassObject classObject) { if (!isMainThread()) { logError("只能在主线程中使用ClassPool,子线程中请使用ClassPoolThread代替"); return; } bool inuse = isInuse(classObject); classObject.resetProperty(); classObject.setDestroy(true); // 从已使用列表中移除 if (inuse) { removeInuse(classObject); } // 从未使用列表中移除 else { if (mUnusedList.TryGetValue(classObject.GetType(), out HashSet <IClassObject> list) && list.Count > 0) { list.Remove(classObject); } } }
public void destroyClass(IClassObject classObject) { if (!isMainThread()) { logError("只能在主线程中使用ClassPool,子线程中请使用ClassPoolThread代替"); return; } classObject.resetProperty(); classObject.setDestroy(true); addUnuse(classObject); removeInuse(classObject); }
public void destroyClass(IClassObject classObject) { mListLock.waitForUnlock(); classObject.resetProperty(); classObject.setDestroy(true); // 加入未使用列表 if (!mUnusedList.Add(classObject)) { logError("对象已经在未使用列表中,无法再次销毁! Type: " + mType); } // 从使用列表移除,要确保操作的都是从本类创建的实例 if (!mInusedList.Remove(classObject)) { logError("从未使用列表中移除失败! Type: " + mType); } mListLock.unlock(); }
// 返回值表示是否是new出来的对象,false则为从回收列表中重复使用的对象 public bool newClass(out IClassObject obj, Type type) { bool isNewObject = false; string info = null; obj = null; // 锁定期间不能调用任何其他非库函数,否则可能会发生死锁 mListLock.waitForUnlock(); try { // 先从未使用的列表中查找是否有可用的对象 if (mUnusedList.ContainsKey(type) && mUnusedList[type].Count > 0) { obj = mUnusedList[type][0]; isNewObject = false; } // 未使用列表中没有,创建一个新的 else { obj = createInstance <IClassObject>(type); isNewObject = true; } // 标记为已使用 if (!markUsed(obj)) { info = "ClassObject is in Inused list! can not add again!"; } } catch (Exception e) { logError(e.Message); } mListLock.unlock(); if (!isEmpty(info)) { logError(info); } // 重置实例 obj?.resetProperty(); return(isNewObject); }
// 返回值表示是否是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); }
public void destroyClassReally(IClassObject classObject) { bool inuse = isInuse(classObject); mListLock.waitForUnlock(); classObject.resetProperty(); classObject.setDestroy(true); // 从已使用列表中移除 if (inuse) { // 从使用列表移除,要确保操作的都是从本类创建的实例 if (!mInusedList.Remove(classObject)) { logError("在未使用列表中找不到对象! Type: " + mType); } } // 从未使用列表中移除 else { mUnusedList.Remove(classObject); } mListLock.unlock(); }