처음에 앱 델리게이트에서 소스

KDbool CCAppDelegate::applicationDidFinishLaunching ( KDvoid )
{
    CCDirector* director = CCDirector::sharedDirector ( );
    director->reshapeProjection ( CGSize ( 1024, 600 ) );

    CCScene* scene = CCScene::node   ( );
    CCLayer* layer = new MainLayer ( FRIEND_MAP );

    layer->autorelease ( );
    scene->addChild    ( layer );
    
    director->runWithScene ( scene );

    return KD_TRUE;
}


그 다음에는 MainLayer

MainLayer::MainLayer ( KDint id )
{
    switch ( id )
    {  //PlaceLayer와 FirendLayer는 쌍둥이처럼 소스가 같다.
        case 0 :  m_layer = new FriendLayer ( ); break;
        case 1 :  m_layer = new PlaceLayer ( );  break;
        default : m_layer = KD_NULL;
    }  
    m_layer->autorelease ( );
    m_layer->setPosition ( ccp ( 0, 0));
    this->addChild ( m_layer );
    
    CCLayer* b_layer = new BannerLayer ( );
    b_layer->autorelease ( );
    b_layer->setPosition ( ccp ( 0, 0));
    this->addChild ( b_layer );

    CGSize s = CCDirector::sharedDirector ( )->getWinSize ( );

};

그 다음에는  BannerLayer의 new 할당 부분인데요.
BannerLayer:: BannerLayer ( KDvoid )
{
.......  생략

   CCMenuItemSprite* place_btn = CCMenuItemSprite::itemFromNormalSprite
        (
            CCSprite::spriteWithFile ( "image/menu_place.png", CGRectMake ( 0,  0, 97, 28 ) ),
            CCSprite::spriteWithFile ( "image/menu_place.png", CGRectMake ( 97, 0, 97, 28 ) ),
            this,
            menu_selector ( BannerLayer::TransitionPlaceScene )
        );
        CCMenuItemSprite* friend_btn = CCMenuItemSprite::itemFromNormalSprite
        (
            CCSprite::spriteWithFile ( "image/menu_friend.png", CGRectMake ( 0,   0, 103, 28 ) ),
            CCSprite::spriteWithFile ( "image/menu_friend.png", CGRectMake ( 103, 0, 103, 28 ) ),
            this,
            menu_selector ( BannerLayer::TransitionFriendScene )
        );

..... 생략
}

KDvoid BannerLayer::TransitionPlaceScene ( NSObject* pSender )
{
    
    CCScene* scene = CCScene::node   ( );
    CCLayer* layer = new MainLayer ( PLACE_MAP );

    layer->autorelease ( );
    scene->addChild    ( layer );

    CCScene* t_scene = CCTransitionFlipX::transitionWithDuration ( 0.5f, scene );
    CCDirector::sharedDirector ( )->replaceScene ( t_scene );    
};

KDvoid BannerLayer::TransitionFriendScene ( NSObject* pSender )
{
    CCScene* scene = CCScene::node   ( );
    CCLayer* layer = new MainLayer ( FRIEND_MAP );

    layer->autorelease ( );
    scene->addChild    ( layer );

    CCScene* t_scene = CCTransitionFlipX::transitionWithDuration ( 0.5f, scene );
    CCDirector::sharedDirector ( )->replaceScene ( t_scene );  
    
}

autorelease의 시점을 MainLayer가 해제되는 시점으로 일원화 시켜줬더니 메모리 릭이 사라집니다.

하지만  다음과 같이 MainLayer_1, MainLayer_2라는  쌍둥이 레이어를 생성하고 나눠서 이벤트를 발생시킨다면 메모리 릭이 발생하게 되네요.

KDvoid BannerLayer::TransitionPlaceScene ( NSObject* pSender )
{
    
    CCScene* scene = CCScene::node   ( );
    CCLayer* layer = new MainLayer___1 ( PLACE_MAP );

   이하 동문
};

KDvoid BannerLayer::TransitionFriendScene ( NSObject* pSender )
{
    CCScene* scene = CCScene::node   ( );
    CCLayer* layer = new MainLayer____2 ( FRIEND_MAP );

   이하 동문
    
}