diff --git a/cocos2dx/cocoa/CCAutoreleasePool.cpp b/cocos2dx/cocoa/CCAutoreleasePool.cpp index d6583c296f..1e5143694c 100644 --- a/cocos2dx/cocoa/CCAutoreleasePool.cpp +++ b/cocos2dx/cocoa/CCAutoreleasePool.cpp @@ -41,8 +41,6 @@ CCAutoreleasePool::~CCAutoreleasePool(void) void CCAutoreleasePool::addObject(CCObject* pObject) { - CCAssert(false == pObject->m_bManaged, "this object is already in autorelese pool"); - m_pManagedObjectArray->addObject(pObject); CCAssert(pObject->m_uReference > 1, "reference count should be greater than 1"); @@ -70,7 +68,7 @@ void CCAutoreleasePool::clear() if(!pObj) break; - pObj->m_bManaged = false; + --(pObj->m_uAutoReleaseCount); //(*it)->release(); //delete (*it); #ifdef _DEBUG diff --git a/cocos2dx/cocoa/CCObject.cpp b/cocos2dx/cocoa/CCObject.cpp index 8084c65180..dc807406c7 100644 --- a/cocos2dx/cocoa/CCObject.cpp +++ b/cocos2dx/cocoa/CCObject.cpp @@ -38,7 +38,7 @@ CCObject* CCCopying::copyWithZone(CCZone *pZone) } CCObject::CCObject(void) -:m_bManaged(false) +:m_uAutoReleaseCount(0) ,m_uReference(1) // when the object is created, the reference count of it is 1 ,m_nLuaID(0) { @@ -51,9 +51,12 @@ CCObject::~CCObject(void) { // if the object is managed, we should remove it // from pool manager - if (m_bManaged) + if (m_uAutoReleaseCount > 0) { - CCPoolManager::sharedPoolManager()->removeObject(this); + for (int i = 0; i < m_uAutoReleaseCount; ++i) + { + CCPoolManager::sharedPoolManager()->removeObject(this); + } } // if the object is referenced by Lua engine, remove it @@ -98,7 +101,7 @@ CCObject* CCObject::autorelease(void) { CCPoolManager::sharedPoolManager()->addObject(this); - m_bManaged = true; + ++m_uAutoReleaseCount; return this; } diff --git a/cocos2dx/cocoa/CCObject.h b/cocos2dx/cocoa/CCObject.h index 2aff081ee1..010e55df62 100644 --- a/cocos2dx/cocoa/CCObject.h +++ b/cocos2dx/cocoa/CCObject.h @@ -55,8 +55,8 @@ public: protected: // count of references unsigned int m_uReference; - // is the object autoreleased - bool m_bManaged; + // count of autorelease + unsigned int m_uAutoReleaseCount; public: CCObject(void); virtual ~CCObject(void);