标签:blog os 使用 io ar 2014 问题 log amp
最近几天把查了项目的内存泄漏问题,发现了些之前没想到问题,主要是引用后cocosBuilder导致的问题。
首先说下cocos2dx里面,基本的一些内存管理原则
1.每个CCObject对象在创建时 (eg: new CCObject ()), 它的引用计数为1,4.所有手动调用retain () 的对象 (比如要保持住一个CCObject对象, 而它又不用被加到场景中去), 都要对应显示调用release ()
正常来讲,只要注意以上几点,项目中是不会出现内存问题,但在引用cocosBuilder后.会出现一些意想不到的事.
首先CCB_MEMBERVARIABLEASSIGNER_GLUE(...).
#define CCB_MEMBERVARIABLEASSIGNER_GLUE(TARGET, MEMBERVARIABLENAME, MEMBERVARIABLETYPE, MEMBERVARIABLE) if (pTarget == TARGET && 0 == strcmp(pMemberVariableName, (MEMBERVARIABLENAME))) { MEMBERVARIABLETYPE pOldVar = MEMBERVARIABLE; MEMBERVARIABLE = dynamic_cast<MEMBERVARIABLETYPE>(pNode); CC_ASSERT(MEMBERVARIABLE); if (pOldVar != MEMBERVARIABLE) { CC_SAFE_RELEASE(pOldVar); MEMBERVARIABLE->retain(); } return true; } LoginShow_CCB()
:CCLayer()
,m_menu(0)
,m_menuItem_exchangeUser(0)
,m_menuItem_exchangeServer(0)
,m_menuItem_enterGame(0)
,m_menuItem_binding(0)
,m_menuItem_reLogin(0)
,m_labelUserEmail(0)
,m_labelTip_email(0)
,m_labelServerName(0)
,m_labelTip_server(0)
,m_labelBundleVersion(0)
{}
virtual ~ LoginShow_CCB(){
// CC_SAFE_RELEASE_NULL(m_menu);
// CC_SAFE_RELEASE_NULL(m_menuItem_exchangeUser);
// CC_SAFE_RELEASE_NULL(m_menuItem_exchangeServer);
// CC_SAFE_RELEASE_NULL(m_menuItem_enterGame);
// CC_SAFE_RELEASE_NULL(m_menuItem_binding);
// CC_SAFE_RELEASE_NULL(m_menuItem_reLogin);
// CC_SAFE_RELEASE_NULL(m_labelUserEmail);
// CC_SAFE_RELEASE_NULL(m_labelTip_email);
// CC_SAFE_RELEASE_NULL(m_labelServerName);
// CC_SAFE_RELEASE_NULL(m_labelTip_server);
// CC_SAFE_RELEASE_NULL(m_labelBundleVersion);
}
再一点,CCBAnimationManager::setAnimationCompletedCallback
如果需要在ccb的某一动作完成时,回调一个自定义方法,就会用到上面这句,这里也有一个坑,
void CCBAnimationManager::setAnimationCompletedCallback(CCObject *target, SEL_CallFunc callbackFunc) {
if (target)
{
target->retain();
}
if (mTarget)
{
mTarget->release();
}
mTarget = target;
mAnimationCompleteCallbackFunc = callbackFunc;
}标签:blog os 使用 io ar 2014 问题 log amp
原文地址:http://blog.csdn.net/rct1985/article/details/38867589