2017-01-26 4 views
0

나는 노드 '페이지'를 추가하는 장면이있다;장면에서 CCNode를 어떻게 제거하고 메모리에서 해제 할 수 있습니까? Cocos2d V3

[self addChild:_page z:-1]; 
내가

[self removeChild:_page]; 

메모리 디버그 통해 본 (동일하게 유지 장면에서 페이지를 제거하면

'페이지'

@property CCNode* page; 

로 헤더 파일에 초기화된다 항해자).

hd 이미지, 애니메이션 및 물리 환경이 포함 된 많은 페이지를 추가하고 제거하기 때문에 이것은 문제가됩니다. 일부 노드를 추가 및 제거한 후 메모리 부족 경고가 표시되고 응용 프로그램이 중단됩니다.

답변

0

다음은 메모리에서 CCNode의 대부분의 내용을 제거한 코드입니다. 노드에 오디오가 포함되어 있지 않음을 유의하십시오.

구현 파일의 맨 위에 다음 줄을 추가하십시오.

#import "CCTextureCache.h" 

구현 파일에도 onExit 메서드를 추가하십시오.

-(void)onExit{ 
    [super onExit]; 
    [self removeAllChildren]; 
    [[CCTextureCache sharedTextureCache]removeUnusedTextures]; 
} 

은 텍스처 당신이

[[CCTextureCache sharedTextureCache]dumpCachedTextureInfo]; 

이 응용 프로그램을 실행하고 실시간으로 메모리를 모니터링하는 엑스 코드의 디버그 네비게이터를 사용하여 사용할 수 있습니다 제거 있는지 확인하십시오.

기타/제거 노드를 추가하는 방법에 대한 연구 : 앱이 장치에 대한 특정 메모리 임계 값에 도달하면 때문에 메모리에 대해 "걱정할 필요가 없습니다"적인 Cocos2D V3.0의에서

을, 당신은 얻을 ' 낮은 메모리 경고 ', CCAppDelegate 자동으로 캐시 된 데이터를 제거합니다.

// purge memory 
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 
{ 
    [[CCDirector sharedDirector] purgeCachedData]; 
} 

그러나 크고, 때로는 복수의 텍스처 파일을로드하고 메모리 임계 값을 초과하는 응용 프로그램의 기회가 될 수있는 경우, 메모리를 낮게 유지하는 것은 도움이 될 수 있습니다.

사용하지 않는 데이터를 제거하면 프로그램에 영향을 줄 수있는 메모리 누수 또는 버그가있는 코드를 제거하는 데 도움이 될 수도 있습니다.

+0

내가 기억한다면 잠재적 인 보존주기 (애니메이션 등)를 없애기 위해 아무것도 제거 할 때 '정리 : 예'해야합니다. – YvesLeBorg

관련 문제