その先にあるもの…

cocos2d-x 메모리 관리 본문

프로그래밍/cocos2d

cocos2d-x 메모리 관리

specialJ 2013. 6. 19. 17:31

cocos2d-x는 레퍼런스 카운트(Reference count)로 메모리를 관리한다.


레퍼런스 카운트 과정은 기본적으로 객체가 생성될 때 카운트 1로 초기화 되고 카운트가 0일때 소멸시킨다.


Reference count와 관계된 함수

retain()             //Reference Count를 1씩 증가 시킨다.

release()          //Reference Count를 1씩 감소 시킨다. 0일때 delete this로 소멸

autorelease()    //cocos에서 다음 루프 때 release() 호출한다.


//new로 생성할때

//생성자에서 m_uReference가 1로 초기화 된다.
CCSprite* pSprite = new CCSprite;

//m_uReference가 1씩 감소하며 0일때 delete this;로 소멸한다.
pSrite->release()


//createXXX()로 생성할때

//내부에는 각 개체의 할당이 있다. ref = 1
CCSprite* pSprite = CCSprite::create("filename");

//cocos 객체에 add시키는 경우 Reference Count가 증가한다 ref = 2.
layer->addChild( pSprite );


autorelease()는 설명을 해야 하는데

autorelease()를 호출하면 cocos momory pool에 add가 되는데

cocos main loop에서 매번 pool을 비우는데 add된 객체를 release()한다.

layer::init()
{
       //create()함수 내부에서 new CCSprite 및 autorelease()를 호출한다.
      // 메모리 풀에 등록
      // ref = 1, auto ref = 1
      CCSprite* sprite = CCSprite::create( NAME );
      // ref = 2
      thils->addChild(sprite);
}

//cocos main loop
// ref = 2, auto ref = 0
//pool->clear() 
// ref = 1, auto ref = 0
//sprite->release();

layer::onExit()
{
    //layer 지워지면서 sprite의 release()호출 소멸된다.
    CCDirector* pDirector = CCDirector::sharedDirector();
    pDirector->getTouchDispatcher()->removeDelegate(this);
    CCLayer::onExit();
}


'프로그래밍 > cocos2d' 카테고리의 다른 글

cocos2d-x bmpFont kerning  (0) 2013.07.12
cocos cache 삭제  (0) 2013.06.19
임의의 점을 중심으로 한 sprite회전  (0) 2013.06.17
Comments