From 3abc386793eda66b4197a143f34b7d7ef7ab6bcf Mon Sep 17 00:00:00 2001 From: Nomango <569629550@qq.com> Date: Sat, 21 Oct 2017 19:53:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E9=87=8A=E6=94=BE=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Easy2D/Base/EApp.cpp | 10 ---------- Easy2D/Easy2D.vcxproj | 4 +--- Easy2D/Manager/EObjectManager.cpp | 19 +++++-------------- Easy2D/Node/ENode.cpp | 4 ++++ Easy2D/ebase.h | 3 --- Easy2D/etools.h | 3 --- 6 files changed, 10 insertions(+), 33 deletions(-) diff --git a/Easy2D/Base/EApp.cpp b/Easy2D/Base/EApp.cpp index 8cb0da97..f8b7acc0 100644 --- a/Easy2D/Base/EApp.cpp +++ b/Easy2D/Base/EApp.cpp @@ -271,8 +271,6 @@ void e2d::EApp::run() // 关闭控制台 EApp::showConsole(false); - // 释放所有内存资源 - this->_free(); } void e2d::EApp::setFPS(UINT32 fps) @@ -581,14 +579,6 @@ void e2d::EApp::showWindow() ShowWindow(GetHWnd(), SW_SHOWNORMAL); } -void e2d::EApp::_free() -{ - // 删除图片缓存 - ETexture::clearCache(); - // 删除所有对象(包括所有场景、定时器、监听器、动画) - EObjectManager::clearAllObjects(); -} - void e2d::EApp::quit() { get()->m_bEnd = true; diff --git a/Easy2D/Easy2D.vcxproj b/Easy2D/Easy2D.vcxproj index 949eaf95..97b23fc5 100644 --- a/Easy2D/Easy2D.vcxproj +++ b/Easy2D/Easy2D.vcxproj @@ -101,7 +101,7 @@ Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - EditAndContinue + None false @@ -146,7 +146,6 @@ NotUsing Level3 MaxSpeed - false true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true @@ -172,7 +171,6 @@ NotUsing Level3 MaxSpeed - true true NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true diff --git a/Easy2D/Manager/EObjectManager.cpp b/Easy2D/Manager/EObjectManager.cpp index 9414e5f7..c2059524 100644 --- a/Easy2D/Manager/EObjectManager.cpp +++ b/Easy2D/Manager/EObjectManager.cpp @@ -1,11 +1,11 @@ #include "..\etools.h" // EObjectManager 释放池的实现机制: -/// EObject 类中的引用计数(m_nRefCount)保证了指针的使用安全 -/// 它记录了对象被使用的次数,当计数为 0 时,EObjectManager 会自动释放这个对象 -/// 所有的 EObject 对象都应在被使用时(例如 Text 添加到了场景中) -/// 调用 retain 函数保证该对象不被删除,并在不再使用时调用 release 函数 -/// 让其自动释放 +// EObject 类中的引用计数(m_nRefCount)保证了指针的使用安全 +// 它记录了对象被使用的次数,当计数为 0 时,EObjectManager 会自动释放这个对象 +// 所有的 EObject 对象都应在被使用时(例如 Text 添加到了场景中) +// 调用 retain 函数保证该对象不被删除,并在不再使用时调用 release 函数 +// 让其自动释放 // 释放池容器 static e2d::EVector s_vPool; @@ -45,15 +45,6 @@ void e2d::EObjectManager::add(e2d::EObject * nptr) } } -void e2d::EObjectManager::clearAllObjects() -{ - for (const auto &obj : s_vPool) - { - delete obj; - } - s_vPool.clear(); -} - void e2d::EObjectManager::notifyFlush() { s_bNotifyed = true; diff --git a/Easy2D/Node/ENode.cpp b/Easy2D/Node/ENode.cpp index aad847b7..e3361016 100644 --- a/Easy2D/Node/ENode.cpp +++ b/Easy2D/Node/ENode.cpp @@ -39,6 +39,10 @@ e2d::ENode::~ENode() EMsgManager::_clearAllMouseListenersBindedWith(this); EMsgManager::_clearAllKeyboardListenersBindedWith(this); EActionManager::_clearAllActionsBindedWith(this); + for (auto child : m_vChildren) + { + SafeReleaseAndClear(&child); + } } void e2d::ENode::onEnter() diff --git a/Easy2D/ebase.h b/Easy2D/ebase.h index 5f460356..862f6985 100644 --- a/Easy2D/ebase.h +++ b/Easy2D/ebase.h @@ -184,9 +184,6 @@ protected: UINT32 height ); - // 释放所有内存资源 - void _free(); - // 窗口程序 static LRESULT CALLBACK WndProc( HWND hWnd, diff --git a/Easy2D/etools.h b/Easy2D/etools.h index 5b6cc869..89685f10 100644 --- a/Easy2D/etools.h +++ b/Easy2D/etools.h @@ -20,9 +20,6 @@ public: e2d::EObject * nptr ); - // 删除所有节点 - static void clearAllObjects(); - // 通知内存池刷新 static void notifyFlush();