Skip to content
pjc0247 edited this page Oct 23, 2014 · 1 revision

cocos2d-x는 레퍼런스 카운팅을 통해 메모리를 관리한다.

레퍼런스 카운팅

모든 오브젝트의 처음 레퍼런스 카운트는 1이다.
다른 오브젝트에서 이 오브젝트를 사용하게 될 때 카운터 1 증가.

  • obj->retain(); 호출시 레퍼런스 카운트 1 증가됨.
addChild(obj); /* obj의 레퍼런스 카운트 +1 */
obj->runAction(action); /* action의 레퍼런스 카운트 +1 */



반대로 더 이상 사용하지 않게 될 때 1 감소.

  • obj->release(); 호출시 레퍼런스 카운트 1 감소됨.
removeChild(obj); /* obj의 레퍼런스 카운트 -1 */
obj->stopAction(action); /* action의 레퍼런스 카운트 -1*/



레퍼런스 카운트가 0이 되는 순간 오브젝트는 delete된다.
autorelease

Object::create로 생성된 오브젝트들은 cocos2d의 autorelease-pool에 등록된다.
autorelease-pool에 등록된 오브젝트들은 이번 프레임이 끝나고 전부 release된다.
( 레퍼런스 카운트가 1 줄어드는 것 뿐이지 무조건 delete아님 )
만약 오브젝트를 만들었는데, 당장 붙잡아 주는(addChild 등) 오브젝트가 없으면, 프로그래머가 직접 붙잡아야(retain) 한다.

obj->retain();

반대로 이 오브젝트가 쓸모 없어지는 시점에는 프로그래머가 직접 release해주어야 한다.

obj->release();

Clone this wiki locally