2013-01-15 3 views
0

[CCBReader nodeGraphWithFile:] 메서드를 사용하여 CocosBuilder 템플릿에서 만든 노드가 하나만 포함 된 간단한 CCScene이 있습니다.cocos2d 장면 할당 취소 및 ccb 노드

지금까지 autoreleased 될 것으로 예상했기 때문에 지금까지 장면의 dealloc 방법으로 ccb 노드를 릴리스하지 않았습니다. 그러나 할당 프로파일 러에서 나는 CCDirector에서 여러 번 장면을 밀거나 팝하면 메모리 누수가 있음을 발견했습니다.

사실 release 노드의 장면 dealloc에서이 메모리 누수가 사라집니다.

왜 노드를 유지해야합니까/초기화하지 않았습니까? 내가 잘못 이해 한 것이 있습니까?

답변

0

이 과정을 통해 생성 된 개체는 어떻게됩니까?

[CCBReader nodeGraphWithFile:] 

보유 속성에 할당하면 유지됩니다. 그래서 명시 적으로 해제해야합니다. 예컨대 :

nodeGraph이 유지 속성으로 선언
self.nodeGraph = [CCBReader nodeGraphWithFile:...]; 

경우, [CCBReader nodeGraphWithFile:]에서 만든 오토 릴리즈 객체에 속성으로 유지 얻을 것이다 당신이 dealloc에서 해제해야합니다.

명암이 노드 객체에 대한 참조를 유지하고 직접 노드 계층 구조에 추가 속성을 사용하지 에 :

[self addChildNode:[CCBReader nodeGraphWithFile:...]]; 

을이 경우에, 당신은 명시 적 방출을하는 필요가 없습니다 것입니다, 당신이 당신 자신을 그 대상으로 유지하지 않기 때문입니다.

+0

저는 속성에 할당하지 않습니다. 나는 단지 [self addChildNode : [CCBReader nodeGraphWithFile : ...]];를 통해 장면에 추가한다. 그게 내가 왜 – fiddler

+0

이냐고 혼란 스럽다. 어떤 객체를'dealloc' 메쏘드로 보내고있는거야? – sergio

+0

'[[self.children objectAtIndex : 0] release]' – fiddler