카테고리 : 개발

아이폰 개발팁 - 문자열 이름으로 generic하게 함수 호출하기

스크립트 언어처럼 문자열로 함수 호출이 가능합니다.
다양하고 편리하게 활용할 수 있겠죠~
이 코코아 동네에는 참 신기하게 많지만;;
편하고 개념있게(ㅋㅋ) 코딩을 하려면 일단 selector와 delegate에 친해져야 될 거 같아요~

일단 간단한 샘플 코드.. 편의상 함수들은 static으로 정의했습니다.

// 어떤 작업들을 수행하는 handler를 작성했다고 치고..

@interface HandlerClass : NSObject {}


+(void)TestFunction;

+(void)Move;

+(void)Attack;


@end



// 어딘가에서 호출할때.. 문자열로 selector를 구해서 호출하면 됩니다.

NSString* selectorName = @"TestFunction";


SEL s = NSSelectorFromString(selectorName);

if (s)

{

return [HandlerClass performSelector:s];

}




혹시 파라미터를 같이 넘길려면 아래 함수를 사용하면 됩니다. NSObject에 있어요~

- (id)performSelector:(SEL)aSelector withObject:(id)object;


이런건 c++에 비해서 참 많이~~ 좋네요 :>


by 쉬귀 | 2010/11/14 22:56 | 개발 | 트랙백 | 덧글(0)

아이폰 개발 팁 - 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)

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