You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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해주어야 한다.