일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 배열
- dataframe
- autovacuum
- mysql
- null
- with
- pandas
- DROP
- ngui
- boost
- SVN
- sql
- Eclipse
- 쉘
- postgresql
- sqlite
- pi
- if
- awk
- FIND
- List
- C++
- Shader
- Unity
- ubuntu
- c++11
- expect
- SSH
- python
- conda
Archives
- Today
- Total
その先にあるもの…
cocos2d-x 메모리 관리 본문
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