修复资源释放问题

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)
{
frame->autoRelease();
frame->release();
SafeRelease(&frame);
}
}

View File

@ -7,15 +7,19 @@
e2d::EScene::EScene()
: m_bWillSave(true)
, m_bSortNeeded(false)
, m_Root(new ENode())
, m_pRoot(new ENode())
{
m_Root->_onEnter();
m_Root->_setParentScene(this);
m_pRoot->_onEnter();
m_pRoot->_setParentScene(this);
}
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()
@ -42,7 +46,7 @@ bool e2d::EScene::onCloseWindow()
void e2d::EScene::_onRender()
{
m_Root->_callOn();
m_pRoot->_callOn();
}
void e2d::EScene::_onEnter()
@ -63,48 +67,41 @@ void e2d::EScene::_onExit()
EMsgManager::_waitAllKeyboardListenersBindedWith(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 */)
{
m_Root->addChild(child, order);
m_pRoot->addChild(child, order);
}
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 */)
{
return m_Root->removeChild(childName, release);
return m_pRoot->removeChild(childName, release);
}
e2d::EVector<e2d::ENode*>& e2d::EScene::getChildren()
{
return m_Root->m_vChildren;
return m_pRoot->m_vChildren;
}
size_t e2d::EScene::getChildrenCount() const
{
return m_Root->getChildrenCount();
return m_pRoot->getChildrenCount();
}
e2d::ENode * e2d::EScene::getChild(const EString &childName)
{
return m_Root->getChild(childName);
return m_pRoot->getChild(childName);
}
void e2d::EScene::clearAllChildren()
{
m_Root->clearAllChildren();
m_pRoot->clearAllChildren();
}
void e2d::EScene::bindListener(EMouseListener * listener)

View File

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

View File

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

View File

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

View File

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