2012-10-12 4 views
0

iPhone 용 Cocos2D로 게임을 만들고 있습니다. 다음 표현식은 코드 주위에 몇 군데에 나타납니다 : 나는 상수에 넣고 싶은Objective-C 프로젝트의 상수

CGFloat screenCenter = [CCDirector sharedDirector].winSize.width/2.0; 

는 파일이나 표현이 사방에 반복되지 않도록 이와 유사한. 하나 개의 아이디어 Constants.h

#define SCREEN_CENTER [CCDirector sharedDirector].winSize.width/2.0 

을 넣어 그냥 필요 가져 오는 것입니다. 그러나 나는 Objective-C에서 어떤 스타일에서 static const을 사용하는 것이 더 나은 스타일/연습이라는 인상 아래에 있습니다.

static const을 사용하여 screenCenter을 한 위치에 선언 한 다음 필요에 따라 코드 전체에서 다시 사용하려면 어떻게해야합니까?

스크린 센터를 계산할 때마다 대신 한 번만 나누는 것이 한 가지 이점입니다.

답변

3

이것은 컴파일 타임식이 아니므로 static const이 될 수 없습니다.

#define을 계속 사용하려면 주위에 괄호를 감싸거나 미묘한 버그가있을 수 있습니다.

또한 인라인 함수

inline CGFloat screenCenter() { 
    return [CCDirector sharedDirector].winSize.width/2.0f; 
} 

를 사용하는 것이 좋습니다 또는 직접 CCDirector 떨어져 걸어 수 있습니다. 해당 클래스를 소유하고 있지 않다고 가정하면 카테고리를 사용할 수 있습니다.

@interface CCDirector (FunkyStuff) 
- (CGFloat)screenCenter; 
@end 

@implementation CCDirector (FunkyStuff) 
- (CGFloat)screenCenter { 
    return self.winSize.width/2.0f; 
} 
@end 

... 
x = [[CCDirector sharedDirector] screenCenter]; 

편의를 위해 클래스 메서드로 추가 할 수도 있습니다.

+0

대단히 감사합니다! ''inline' 함수의 이점은 무엇입니까? – SundayMonday

+1

@SundayMonday : 글쎄, 당신은'const'에서 원했기 때문에 실행 시간을 최소화하려고한다고 가정합니다. 'inline' 함수는 컴파일러가 함수 호출의 오버 헤드를 건너 뛰고 정의를 콜 사이트로 바로 인라인 할 수있게합니다. 이렇게하려면 함수 구현이 헤더 파일에 있어야합니다. 또는 함수 호출 오버 헤드가 아마 문제가되지 않기 때문에'inline' 부분을 건너 뛸 수 있습니다. –

+0

+1 알겠습니다. 화면의 폭을 사용할 수있게 되 자마자 한 번만 초기화되는 정적 전역 변수에 대해 어떻게 생각하십니까? – SundayMonday

관련 문제