dispatch_once用法用于异步处理

时间:2015-06-16 04:33:47

标签: ios xcode objective-c-2.0

我对dispatch_once的使用感到非常困惑。以下两个版本的代码可以给出相同的结果。使用dispatch_once时有什么区别?

版本1

static dispatch_queue_t downloadQueue;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    downloadQueue = dispatch_queue_create("temp", 0);
});

第2版

static dispatch_queue_t downloadQueue;
downloadQueue = dispatch_queue_create("dryapp", 0);

2 个答案:

答案 0 :(得分:1)

这两者完全不同。第一个(使用dispatch_once)懒惰地实例化下载队列的一个实例。如果再次调用它,则只会在您第一次调用它时再次调用dispatch_once块。当您想要确保只有一个且只有一个对象实例(在这种情况下是一个队列)时,这是一个非常有用的模式。

第二个模式(带有static变量并在第二行实例化)具有static队列,但每次遇到第二行代码时,它都会实例化一个新队列(释放前一个实例化下一个。)

第一种模式是您可能想要的模式,只能实例化一次。

答案 1 :(得分:0)

dispatch_once

没有没有太大差异,因为你可以看到有方法编程方法。Here is the link可能对你有帮助阅读