2013-01-22 59 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; 

有效的或者是有一些其他的方式更有效率?定義對'單位標記'會更好嗎?

回答

2

你應該只是做:

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

你只需要做好dispatch_once伎倆,如果右邊的表達式是不是有效的編譯時間常數。但這是一個有效的編譯時常量,所以你不必經過那個輕微的手。

static表達式通常比#define更好(它是鍵入的,對於一些複雜的表達式,它可能更有效)。在我看來,堅持static

+0

好的。所以如果我理解你是正確的:位的結果只是在編譯時計算一次?還是第一次在運行時?反正只有一次? – hfossli

+0

@hfossli是的,編譯時,只有一次。如果表達式足夠複雜以至於無法在編譯時完成,則會出現一個編譯器錯誤,告訴您這一點。 – Rob

+0

太棒了!即使它是內聯函數? – hfossli