dispatch_once会帮助一个简单的NSArray吗?

时间:2015-02-19 14:47:24

标签: ios objective-c nsarray grand-central-dispatch

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?)中没有性能增益。所以这一切归结为每次都分配这个数组,对吗?

2 个答案:

答案 0 :(得分:2)

问题是,这段代码的执行频率。如果它每秒几千次就可能很重要,因为每次运行会节省几毫秒。但是从我希望的标题中偶尔可以访问,也许每10分钟一次。如果将几毫秒与600秒进行比较,则会得到一个非常小的,几乎不存在的改进。

这将是微优化。

相反,您应该在2条件下进行优化:在运行时,您会发现需要进行优化,并且您能够识别出一个代码块,如果优化它将为您提供巨大的改进。要找到这些使用仪器。

答案 1 :(得分:0)

dispatch_once方法更快。每次调用都有一点点,加上没有dispatch_once的事实,每次调用都会创建一个稍后被释放的数组,这可能会导致紧密循环中的内存压力。

另一方面,dispatch_once是更多的代码。

如果您计划调用方法gazillions次,请使用dispatch_once。否则不要打扰,除非你有不同的情况,你不是只是创建一个阵列,而是做一些更昂贵的事情。