// 返回值表示是否是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); }
// 返回值表示是否是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); }