CCNode 및 CCArray 의 메모리 관리

|
CCArray의 소멸자에서 CCArray에 들어있는 모든 CCObject형을 전부 삭제해주고 메모리 해제를 해준다.

CCArray::~CCArray()
{
    ccArrayFree(data);
}

/** Frees array after removing all remaining objects. Silently ignores NULL arr. */
void ccArrayFree(ccArray*& arr)
{
    if( arr == NULL ) 
    {
        return;
    }
ccArrayRemoveAllObjects(arr); //ccArray에 있는 모든 객체를 다 삭제
free(arr->arr);
free(arr);
arr = NULL;
}


CCNode 의 모든 객체들 addChilde및 removeChild를 할때 추가되는 객체들은 
CCNode 안의 CCArray 멤버변수 m_pChildren 에 저장이 되고 삭제가 되는등 관리가 된다.

CC_PROPERTY_READONLY(CCArray*, m_pChildren, Children)



CCNode::~CCNode(void)
{
    CCLOGINFO( "cocos2d: deallocing" );
    
    unregisterScriptHandler();

    CC_SAFE_RELEASE(m_pActionManager);
    CC_SAFE_RELEASE(m_pScheduler);
    // attributes
    CC_SAFE_RELEASE(m_pCamera);

    CC_SAFE_RELEASE(m_pGrid);
    CC_SAFE_RELEASE(m_pShaderProgram);
    CC_SAFE_RELEASE(m_pUserObject);

    if(m_pChildren && m_pChildren->count() > 0)
    {
        CCObject* child;
        CCARRAY_FOREACH(m_pChildren, child)
        {
            CCNode* pChild = (CCNode*) child;
            if (pChild)
            {
                pChild->m_pParent = NULL;
            }
        }
    }

    // children 등을 전부 삭제한다->CCArray가 삭제되고 CCArray의 소멸자가 생성되므로 위에 있는 것들이 실행되고
   //모든 객체들이 다 삭제된다.
    CC_SAFE_RELEASE(m_pChildren);
}


Trackback 0 And Comment 0
prev | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ··· | 38 | next