将dispatch_once模式与原语一起使用是否有任何好处?

时间:2013-01-22 13:31:18

标签: ios objective-c dispatch

哪个更好?

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

OR就像写

一样有效
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit;

或者是否有其他一些模式更有效?对于'unitFlags',定义会更好吗?

1 个答案:

答案 0 :(得分:2)

你应该这样做:

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

如果右边的表达式不是有效的编译时常量,则只需要执行dispatch_once技巧。但这是一个有效的编译时常量,所以你不必经过那么轻微的手。

static表达式通常优于#define(它的类型,对于某些复杂的表达式,它可能更有效)。在我看来,坚持使用static