2009-05-24 5 views
1

인터넷에서 다운로드 한 일부 코드를 검토 중이었습니다 (Got it here)코코아 : 코드에서 #define으로 혼란 스니까?

나는이 코드 라인과 혼동합니다 ... 정확히 무엇을하고 있습니까?

static NSString *randomWords[] = { 
@"Hello", 
@"World", 
@"Some", 
@"Random", 
@"Words", 
@"Blarg", 
@"Poop", 
@"Something", 
@"Zoom zoom", 
@"Beeeep", 
}; 
+1

질문은 명확하고 설명이 풍부한 제목을 제공하면 다른 사람들에게 훨씬 유용합니다. – smorgan

답변

5

sizeof(randomWords) 어레이가 차지하는 바이트 수를 제공한다 : 여기

#define N_RANDOM_WORDS (sizeof(randomWords)/sizeof(NSString *)) 

는 "randomWords"배열이다. 배열의 각 요소는 NSString 포인터입니다. sizeof(NSString*) 각 포인터의 크기를 제공합니다. 따라서 총 크기를 각 요소의 크기로 나눠서 요소의 수를 제공합니다.

N_RANDOM_WORDS은 정의 된 매크로입니다. 그것이 사용되는 곳마다 표현식 sizeof(randomWords)/sizeof(NSString*)이 전처리기에 의해 삽입됩니다. 일반적으로 상수가 C 또는 목표 C에서 정의되는 방법입니다.

C (및 Objective C)의 매크로에 대한 자세한 내용은 here's a nice tutorial입니다.

+0

알겠습니다. 하지만 확실하게, 내가 이것을 할 경우 : "#define NSLOG_IT (NSLOG @"logging ")"그런 다음 내 코드에서 NSLOG_IT를 호출하면 "logging"이 로그 아웃됩니까? –

+0

나는 이것을 '#define NSLOG_IT NSLog (@ "logging")'라고 쓰고 싶다고 생각한다. 그런 다음 'NSLOG_IT;'문을 쓸 수 있습니다. 당신이 말하는 것처럼 "로깅"을 출력 할 것입니다. –

+0

"NSLog"라고 쓰려 죄송합니다. 고마워요 남자 –

1

하나의 NSString*sizeof(NSString*) 바이트를 취합니다. randomWords의 크기는 N * sizeof(NSString)입니다. 따라서 N을 해결하면 N = sizeof(randomWords)/sizeof(NSString *)이됩니다.