2013-01-22 3 views
1

어느 것이 더 낫습니까?프리미티브와 함께 dispatch_once 패턴을 사용하면 어떤 이점이 있습니까?

static unsigned unitFlags; 
static dispatch_once_t onceToken; 
dispatch_once(&onceToken, ^{ 
    unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit; 
}); 

또는

unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit; 

를 작성하는 등 그와 마찬가지로 효율적으로 또는 다른 패턴보다 효율적 있는가? 'unitFlags'에 대한 정의가 더 좋을까요?

답변

2

당신은 다만해야합니다 오른쪽에있는 표현식이 유효 컴파일 타임 상수가 아닌 경우

static unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit; 

당신 만 dispatch_once 트릭을 할 필요가있다. 그러나 이것은 유효한 컴파일 타임 상수이므로, 여러분은 그 약간의 손을 거치지 않아도됩니다.

그러나 static 표현은 일반적으로 #define보다 우수하며 형식이 지정되어 있고 복잡한 표현 인 경우 더 효율적일 수 있습니다. 내 생각에 static으로 붙어 있습니다.

+0

확인. 그래서 당신이 이해한다면 : 비트의 결과는 컴파일 시간에 한 번 계산됩니까? 아니면 런타임에 처음입니까? 어쨌든 한 번만? – hfossli

+0

@hfossli 네, 컴파일시 한 번만. 표현식이 컴파일 타임에 수행 할 수 없을 정도로 복잡하면 컴파일러 오류가 발생합니다. – Rob

+0

그게 좋습니다! 함수에서 인라인 인 경우에도 마찬가지입니다. – hfossli

관련 문제