아이폰 개발 팁 - cocos2d의 CCSpriteFrameCache 에서 plist 제거하기

cocos2d에서 텍스쳐를 효율적으로 사용하기 위해서는 

CCSpriteFrameCache를 이용해서 plist로 관리를 하게 됩니다.


그런데, 더 이상 사용하지 않을 plist는 제거를 해두면 되는데..

명시적으로 plist를 제거했음에도 깔끔하게 제거가 안되고 메모리를 계속 차지하고 있더군요.

그래서, 삽질을 좀 하다가 코드를 보니..


CCSpriteFrameCache에 추가할때 CCTextureCache에 texture를 등록하는데 제거할 때는 그냥 두더군요.

아마 다른데서 계속 사용하라는 배려인거 같은데..

plist 통째로(모든 스프라이트 포함이겠죠) 명확히 필요가 없는 시점에서는 

아래와 같이 두 cache에서 모두 제거를 해야 메모리가 정확히 해제가 됩니다.


// plist추가!

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"test.plist"];



// plist 완벽 제거!

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:@"test.plist"];

[[CCTextureCache sharedTextureCache] removeTextureForKey:@"test.png"];


removeUnused...시리즈의 함수랑은 의미가 좀 다릅니다.

Run with Performance Tool - Allocations로 꼭 메모리 사용량 확인해 주는 센스~



by 쉬귀 | 2010/11/08 23:02 | 개발 | 트랙백 | 덧글(2)

트랙백 주소 : http://www.suigui.com/tb/3058868
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 윤영한 at 2011/03/10 13:48
게시글과 같은 방법으로 제거를 하려고 하는데요,
Run with Performance Tool - Allocations로 확인해 봐도 도무지 줄지가 않네요.
cocos2d 0.99.5버젼에 xCode 3.2.5버젼을 쓰고 있습니다.
test.png라고 쓰인 부분은 plist 파일과 동일한 이름으로 하는것이 맞는거죠?
그러니까 test1.png,test2.png... 이렇게 다 제거해 주는게 아닌거죠?
Commented by 쉬귀 at 2011/03/16 09:57
화일 이름은 맞고요. 아마 다른 부분에서 사용중인거 아닐까요? 외부에서 쓰이는 것들 다 지우고..
마지막으로 저기꺼도 지워야 다 정리가 될 거 같아요.
요즘 블로그를 버려둬서(-_-) 답글이 늦었네요;;

:         :

:

비공개 덧글

◀ 이전 페이지 다음 페이지 ▶