2018-04-02 23:01:38 +08:00
|
|
|
|
#include "..\emanager.h"
|
2017-10-26 17:17:30 +08:00
|
|
|
|
#include "..\ebase.h"
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2018-02-07 16:37:12 +08:00
|
|
|
|
// ObjectManager <20>ͷųص<C5B3>ʵ<EFBFBD>ֻ<EFBFBD><D6BB>ƣ<EFBFBD>
|
2018-03-03 17:02:08 +08:00
|
|
|
|
// Object <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>m_nRefCount<6E><74><EFBFBD><EFBFBD>֤<EFBFBD><D6A4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʹ<EFBFBD>ð<EFBFBD>ȫ
|
2018-02-07 16:37:12 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>¼<EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õĴ<C3B5><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ 0 ʱ<><CAB1>ObjectManager <20><><EFBFBD>Զ<EFBFBD><D4B6>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2018-03-03 17:02:08 +08:00
|
|
|
|
// <20><><EFBFBD>е<EFBFBD> Object <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ڱ<EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Text <20><><EFBFBD>ӵ<EFBFBD><D3B5>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>У<EFBFBD>
|
2017-10-21 19:53:38 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD> retain <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD>ö<EFBFBD><C3B6><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> release <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ͷ<EFBFBD>
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2018-03-03 17:02:08 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
static std::vector<e2d::Object*> s_vObjectPool;
|
2017-10-14 01:07:34 +08:00
|
|
|
|
// <20><>־<EFBFBD>ͷų<CDB7>ִ<EFBFBD><D6B4>״̬
|
|
|
|
|
|
static bool s_bNotifyed = false;
|
2017-10-12 23:34:13 +08:00
|
|
|
|
|
2018-03-03 17:02:08 +08:00
|
|
|
|
void e2d::ObjectManager::__update()
|
2017-10-12 23:34:13 +08:00
|
|
|
|
{
|
2017-10-14 01:07:34 +08:00
|
|
|
|
if (!s_bNotifyed) return;
|
|
|
|
|
|
|
|
|
|
|
|
s_bNotifyed = false;
|
2017-10-12 23:34:13 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2018-03-03 11:46:57 +08:00
|
|
|
|
static std::vector<e2d::Object*>::iterator iter;
|
2017-10-12 23:34:13 +08:00
|
|
|
|
// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
|
2018-03-03 17:02:08 +08:00
|
|
|
|
for (iter = s_vObjectPool.begin(); iter != s_vObjectPool.end();)
|
2017-10-12 23:34:13 +08:00
|
|
|
|
{
|
2018-03-03 17:02:08 +08:00
|
|
|
|
if ((*iter)->getReferenceCount() <= 0)
|
2017-10-12 23:34:13 +08:00
|
|
|
|
{
|
2017-10-31 17:19:13 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õļ<C3B5><C4BC><EFBFBD>С<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD> 0, <20>ͷŸö<C5B8><C3B6><EFBFBD>
|
2017-10-12 23:34:13 +08:00
|
|
|
|
delete (*iter);
|
|
|
|
|
|
// <20><><EFBFBD>ͷų<CDB7><C5B3><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
|
2018-03-03 17:02:08 +08:00
|
|
|
|
iter = s_vObjectPool.erase(iter);
|
2017-10-12 23:34:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
iter++; // <20>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-03-06 09:56:17 +08:00
|
|
|
|
void e2d::ObjectManager::__uninit()
|
2018-03-03 17:02:08 +08:00
|
|
|
|
{
|
2018-03-06 09:56:17 +08:00
|
|
|
|
// <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
|
|
|
|
|
s_bNotifyed = true;
|
|
|
|
|
|
ObjectManager::__update();
|
|
|
|
|
|
|
|
|
|
|
|
s_bNotifyed = true;
|
|
|
|
|
|
ObjectManager::__update();
|
2018-03-03 17:02:08 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-03-03 11:46:57 +08:00
|
|
|
|
void e2d::ObjectManager::add(e2d::Object * nptr)
|
2017-10-12 23:34:13 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (!nptr->m_bManaged)
|
|
|
|
|
|
{
|
|
|
|
|
|
nptr->m_bManaged = true;
|
2018-03-03 17:02:08 +08:00
|
|
|
|
s_vObjectPool.push_back(nptr); // <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷų<CDB7><C5B3><EFBFBD>
|
2017-10-12 23:34:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-03-03 11:46:57 +08:00
|
|
|
|
void e2d::ObjectManager::clear()
|
2017-10-14 01:07:34 +08:00
|
|
|
|
{
|
|
|
|
|
|
s_bNotifyed = true;
|
|
|
|
|
|
}
|