dispatch_once
+ (NSArray *)titles
{
static NSArray *_titles;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_titles = @[@"Your Move",
@"Their Move",
@"Won Games",
@"Lost Games",
@"Options"];
});
return _titles;
}
简单
+ (NSArray *)titles
{
return @[@"Your Move",
@"Their Move",
@"Won Games",
@"Lost Games",
@"Options"];
}
哪个最快?编译器不是很聪明吗?对于字符串,我们在dispatch_once(NSString – static or inline? Is there any performance gains?)中没有性能增益。所以这一切归结为每次都分配这个数组,对吗?
答案 0 :(得分:2)
问题是,这段代码的执行频率。如果它每秒几千次就可能很重要,因为每次运行会节省几毫秒。但是从我希望的标题中偶尔可以访问,也许每10分钟一次。如果将几毫秒与600秒进行比较,则会得到一个非常小的,几乎不存在的改进。
这将是微优化。
相反,您应该在2条件下进行优化:在运行时,您会发现需要进行优化,并且您能够识别出一个代码块,如果优化它将为您提供巨大的改进。要找到这些使用仪器。
答案 1 :(得分:0)
dispatch_once方法更快。每次调用都有一点点,加上没有dispatch_once的事实,每次调用都会创建一个稍后被释放的数组,这可能会导致紧密循环中的内存压力。
另一方面,dispatch_once是更多的代码。
如果您计划调用方法gazillions次,请使用dispatch_once。否则不要打扰,除非你有不同的情况,你不是只是创建一个阵列,而是做一些更昂贵的事情。