cocos2d-x 스크롤 예제 소스
'잡다한것들전부 > 팁' 카테고리의 다른 글
| CCNode 및 CCArray 의 메모리 관리 (0) | 2014.01.13 |
|---|---|
| cocos2d-x multi-resolution (0) | 2014.01.13 |
| cocos2d-x 스크롤 테이블뷰 예제 소스 (0) | 2014.01.13 |
| cocos2d-x CCString 분리후 CCArray 에 넣기( 문자열 분리하기) (0) | 2014.01.13 |
| cocos2d-x 의 메모리 관리 (0) | 2014.01.13 |
| cocos2d-x 멀티해상도 지원 (0) | 2014.01.13 |
'잡다한것들전부 > 팁' 카테고리의 다른 글
| cocos2d-x multi-resolution (0) | 2014.01.13 |
|---|---|
| cocos2d-x 스크롤 테이블뷰 예제 소스 (0) | 2014.01.13 |
| cocos2d-x CCString 분리후 CCArray 에 넣기( 문자열 분리하기) (0) | 2014.01.13 |
| cocos2d-x 의 메모리 관리 (0) | 2014.01.13 |
| cocos2d-x 멀티해상도 지원 (0) | 2014.01.13 |
| 숫자에 세자리마다 콤마를 찍는 알고리즘 (0) | 2014.01.10 |
c++에서는 new를 해주면 delete를 해주듯이.
cocos2d-x는 new로 객체를 생성시 release()를 호출하여 메모리를 해제한다.
cocos2d-x의 모든 클래스는 CCObject클래스를 상속받는데 CCObject클래스는 생성자에서 m_uReference라는 값을 1로 만들어준다.
m_uReference 의 값을 확인하는 함수는 retainCount()이다.
CCNode * node = new CCNode(); //CCNode의 m_uReference = 1 이됨
this->addChild(node); //CCNode의 m_uReference = 2 가됨
this->removeChild(node,true); //CCNode의 m_uReference = 1 가됨
node->release(); //CCNode의 m_uReference = -17891602(쓰레기값) 메모리해제됨 메모리 할당한값 전부 해제
addChilde시 m_uReference가 1 증가하고 , removeChild시 m_uReference가 1 감소한다. this의 m_uReference는 그대로 이다.
(메모리가 초기화 된것은 visual stduio에서 디버그-창-메모리-메모리1을 누르고 디버깅 모드에서 해당 주소값 입력후 초기화 되는지 확인하면 된다. 초기화가 되면 fe ee fe ee 이런식으로 값이 들어간다)
안전한 코드는 release()후 node = NULL을 입력시 안전한 코드가 된다. C++에서 delete후 null을 입력하는것과 마찬가지이다.
#define SAFE_RELEASE(p) if ((p) != NULL) { delete (p); (p) = NULL; }
이런식으로 정의한후
SAFE_RELEASE(node);로 해도 된다
cocos2d-x에서도 자체 매크로를 제공한다
#define CC_SAFE_DELETE(p) do { if(p) { delete (p); (p) = 0; } } while(0)
#define CC_SAFE_DELETE_ARRAY(p) do { if(p) { delete[] (p); (p) = 0; } } while(0)
#define CC_SAFE_FREE(p) do { if(p) { free(p); (p) = 0; } } while(0)
#define CC_SAFE_RELEASE(p) do { if(p) { (p)->release(); } } while(0)
#define CC_SAFE_RELEASE_NULL(p) do { if(p) { (p)->release(); (p) = 0; } } while(0)
#define CC_SAFE_RETAIN(p) do { if(p) { (p)->retain(); } } while(0)
#define CC_BREAK_IF(cond) if(cond) break
알아서 입맛에 맞게 매크로를 사용하면 된다.
void CCObject::retain(void)
{
CCAssert(m_uReference > 0, "reference count should greater than 0");
++m_uReference;
}
void CCObject::release(void)
{
CCAssert(m_uReference > 0, "reference count should greater than 0");
--m_uReference;
if (m_uReference == 0)
{
delete this;
}
}
autoRelease란 사용자가 메모리 관리에 신경을 덜 써도 된다. ( m_uReference 가 1이면 자동으로 메모리에서 해제된다.)
싱글턴으로 선언된 CCPoolManager에서 관리되면 CCPoolManager가 메모리에서 해제될때 CCPoolManager의 객체들을 전부
release()해주므로 CCPoolManager의 객체중 m_uReference가 1인 것들은 0이되고 자동으로 delete가 된다.
autoRelease는 보통 create()메서드 (2.0이상부터는 전부 create로 변경되었다.) 로 호출되는건 전부 라고 생각하면 된다.
CCNode * node = CCNode::create(); 이런식으로 호출하면 된다.
CCNode * CCNode::create(void)
{
CCNode * pRet = new CCNode();
pRet->autorelease();
return pRet;
}
CCObject* CCObject::autorelease(void)
{
CCPoolManager::sharedPoolManager()->addObject(this);
return this;
}
'잡다한것들전부 > 팁' 카테고리의 다른 글
| cocos2d-x 스크롤 테이블뷰 예제 소스 (0) | 2014.01.13 |
|---|---|
| cocos2d-x CCString 분리후 CCArray 에 넣기( 문자열 분리하기) (0) | 2014.01.13 |
| cocos2d-x 의 메모리 관리 (0) | 2014.01.13 |
| cocos2d-x 멀티해상도 지원 (0) | 2014.01.13 |
| 숫자에 세자리마다 콤마를 찍는 알고리즘 (0) | 2014.01.10 |
| [좌표] 좌표에 대해서 알아봅시다(convertToWorldSpace) 절대좌표 (0) | 2014.01.10 |
TableViewTest.zip

