修复资源释放问题

This commit is contained in:
Nomango 2017-10-19 13:06:14 +08:00
parent 4cd8d0d08b
commit d918f4612f
6 changed files with 31 additions and 46 deletions

View File

@ -18,8 +18,7 @@ e2d::EActionFrames::~EActionFrames()
{ {
for (auto frame : m_vFrames) for (auto frame : m_vFrames)
{ {
frame->autoRelease(); SafeRelease(&frame);
frame->release();
} }
} }

View File

@ -7,15 +7,19 @@
e2d::EScene::EScene() e2d::EScene::EScene()
: m_bWillSave(true) : m_bWillSave(true)
, m_bSortNeeded(false) , m_bSortNeeded(false)
, m_Root(new ENode()) , m_pRoot(new ENode())
{ {
m_Root->_onEnter(); m_pRoot->_onEnter();
m_Root->_setParentScene(this); m_pRoot->_setParentScene(this);
} }
e2d::EScene::~EScene() e2d::EScene::~EScene()
{ {
m_Root->autoRelease(); SafeRelease(&m_pRoot);
ETimerManager::clearAllTimersBindedWith(this);
EMsgManager::clearAllMouseListenersBindedWith(this);
EMsgManager::clearAllKeyboardListenersBindedWith(this);
EActionManager::clearAllActionsBindedWith(this);
} }
void e2d::EScene::onEnter() void e2d::EScene::onEnter()
@ -42,7 +46,7 @@ bool e2d::EScene::onCloseWindow()
void e2d::EScene::_onRender() void e2d::EScene::_onRender()
{ {
m_Root->_callOn(); m_pRoot->_callOn();
} }
void e2d::EScene::_onEnter() void e2d::EScene::_onEnter()
@ -63,48 +67,41 @@ void e2d::EScene::_onExit()
EMsgManager::_waitAllKeyboardListenersBindedWith(this); EMsgManager::_waitAllKeyboardListenersBindedWith(this);
EActionManager::_waitAllActionsBindedWith(this); EActionManager::_waitAllActionsBindedWith(this);
} }
else
{
ETimerManager::clearAllTimersBindedWith(this);
EMsgManager::clearAllMouseListenersBindedWith(this);
EMsgManager::clearAllKeyboardListenersBindedWith(this);
EActionManager::clearAllActionsBindedWith(this);
}
} }
void e2d::EScene::add(ENode * child, int order /* = 0 */) void e2d::EScene::add(ENode * child, int order /* = 0 */)
{ {
m_Root->addChild(child, order); m_pRoot->addChild(child, order);
} }
bool e2d::EScene::remove(ENode * child, bool release /* = false */) bool e2d::EScene::remove(ENode * child, bool release /* = false */)
{ {
return m_Root->removeChild(child, release); return m_pRoot->removeChild(child, release);
} }
void e2d::EScene::remove(const EString &childName, bool release /* = false */) void e2d::EScene::remove(const EString &childName, bool release /* = false */)
{ {
return m_Root->removeChild(childName, release); return m_pRoot->removeChild(childName, release);
} }
e2d::EVector<e2d::ENode*>& e2d::EScene::getChildren() e2d::EVector<e2d::ENode*>& e2d::EScene::getChildren()
{ {
return m_Root->m_vChildren; return m_pRoot->m_vChildren;
} }
size_t e2d::EScene::getChildrenCount() const size_t e2d::EScene::getChildrenCount() const
{ {
return m_Root->getChildrenCount(); return m_pRoot->getChildrenCount();
} }
e2d::ENode * e2d::EScene::getChild(const EString &childName) e2d::ENode * e2d::EScene::getChild(const EString &childName)
{ {
return m_Root->getChild(childName); return m_pRoot->getChild(childName);
} }
void e2d::EScene::clearAllChildren() void e2d::EScene::clearAllChildren()
{ {
m_Root->clearAllChildren(); m_pRoot->clearAllChildren();
} }
void e2d::EScene::bindListener(EMouseListener * listener) void e2d::EScene::bindListener(EMouseListener * listener)

View File

@ -252,8 +252,7 @@ void e2d::EMsgManager::delMouseListeners(const EString & name)
{ {
if ((*mIter)->getName() == name) if ((*mIter)->getName() == name)
{ {
(*mIter)->autoRelease(); SafeRelease(&(*mIter));
(*mIter)->release();
mIter = s_vMouseListeners.erase(mIter); mIter = s_vMouseListeners.erase(mIter);
} }
else else
@ -295,8 +294,7 @@ void e2d::EMsgManager::delKeyboardListeners(const EString & name)
{ {
if ((*kIter)->getName() == name) if ((*kIter)->getName() == name)
{ {
(*kIter)->autoRelease(); SafeRelease(&(*kIter));
(*kIter)->release();
kIter = s_vKeyboardListeners.erase(kIter); kIter = s_vKeyboardListeners.erase(kIter);
} }
else else
@ -433,8 +431,7 @@ void e2d::EMsgManager::clearAllMouseListenersBindedWith(EScene * pParentScene)
auto t = s_vMouseListeners[i]; auto t = s_vMouseListeners[i];
if (t->getParentScene() == pParentScene) if (t->getParentScene() == pParentScene)
{ {
t->autoRelease(); SafeRelease(&t);
t->release();
s_vMouseListeners.erase(s_vMouseListeners.begin() + i); s_vMouseListeners.erase(s_vMouseListeners.begin() + i);
} }
else else
@ -455,8 +452,7 @@ void e2d::EMsgManager::clearAllKeyboardListenersBindedWith(EScene * pParentScene
auto t = s_vKeyboardListeners[i]; auto t = s_vKeyboardListeners[i];
if (t->getParentScene() == pParentScene) if (t->getParentScene() == pParentScene)
{ {
t->autoRelease(); SafeRelease(&t);
t->release();
s_vKeyboardListeners.erase(s_vKeyboardListeners.begin() + i); s_vKeyboardListeners.erase(s_vKeyboardListeners.begin() + i);
} }
else else
@ -477,8 +473,7 @@ void e2d::EMsgManager::clearAllMouseListenersBindedWith(ENode * pParentNode)
auto t = s_vMouseListeners[i]; auto t = s_vMouseListeners[i];
if (t->getParentNode() == pParentNode) if (t->getParentNode() == pParentNode)
{ {
t->autoRelease(); SafeRelease(&t);
t->release();
s_vMouseListeners.erase(s_vMouseListeners.begin() + i); s_vMouseListeners.erase(s_vMouseListeners.begin() + i);
} }
else else
@ -499,8 +494,7 @@ void e2d::EMsgManager::clearAllKeyboardListenersBindedWith(ENode * pParentNode)
auto t = s_vKeyboardListeners[i]; auto t = s_vKeyboardListeners[i];
if (t->getParentNode() == pParentNode) if (t->getParentNode() == pParentNode)
{ {
t->autoRelease(); SafeRelease(&t);
t->release();
s_vKeyboardListeners.erase(s_vKeyboardListeners.begin() + i); s_vKeyboardListeners.erase(s_vKeyboardListeners.begin() + i);
} }
else else

View File

@ -100,8 +100,7 @@ void e2d::EActionManager::clearAllActionsBindedWith(ENode * pTargetNode)
auto a = s_vActions[i]; auto a = s_vActions[i];
if (a->getTarget() == pTargetNode) if (a->getTarget() == pTargetNode)
{ {
a->autoRelease(); SafeRelease(&a);
a->release();
s_vActions.erase(s_vActions.begin() + i); s_vActions.erase(s_vActions.begin() + i);
} }
else else
@ -205,8 +204,7 @@ void e2d::EActionManager::ActionProc()
if (action->_isEnding()) if (action->_isEnding())
{ {
// 动作已经结束 // 动作已经结束
action->autoRelease(); SafeRelease(&action);
action->release();
s_vActions.erase(s_vActions.begin() + i); s_vActions.erase(s_vActions.begin() + i);
} }
else else

View File

@ -69,8 +69,7 @@ void e2d::ETimerManager::delTimers(const EString & name)
{ {
if ((*mIter)->getName() == name) if ((*mIter)->getName() == name)
{ {
(*mIter)->autoRelease(); SafeRelease(&(*mIter));
(*mIter)->release();
mIter = s_vTimers.erase(mIter); mIter = s_vTimers.erase(mIter);
} }
else else
@ -117,8 +116,7 @@ void e2d::ETimerManager::clearAllTimersBindedWith(EScene * pParentScene)
auto t = s_vTimers[i]; auto t = s_vTimers[i];
if (t->getParentScene() == pParentScene) if (t->getParentScene() == pParentScene)
{ {
t->autoRelease(); SafeRelease(&t);
t->release();
s_vTimers.erase(s_vTimers.begin() + i); s_vTimers.erase(s_vTimers.begin() + i);
} }
else else
@ -169,8 +167,7 @@ void e2d::ETimerManager::clearAllTimersBindedWith(ENode * pParentNode)
auto t = s_vTimers[i]; auto t = s_vTimers[i];
if (t->getParentNode() == pParentNode) if (t->getParentNode() == pParentNode)
{ {
t->autoRelease(); SafeRelease(&t);
t->release();
s_vTimers.erase(s_vTimers.begin() + i); s_vTimers.erase(s_vTimers.begin() + i);
} }
else else

View File

@ -88,8 +88,8 @@ public:
// 切换场景 // 切换场景
static void enterScene( static void enterScene(
EScene * scene, EScene * scene, /* 下一个场景的指针 */
bool saveCurrentScene = true bool saveCurrentScene = true /* 是否保存当前场景 */
); );
// 返回上一场景 // 返回上一场景
@ -261,7 +261,7 @@ protected:
protected: protected:
bool m_bSortNeeded; bool m_bSortNeeded;
bool m_bWillSave; bool m_bWillSave;
ENode * const m_Root; ENode * m_pRoot;
}; };