2015-06-16 36 views
1

我对使用dispatch_once非常困惑。以下两个版本的代码可以给出相同的结果。使用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); 

回答

0
dispatch_once 

没有没有这样大的差异,你可以看到,有办法的编程方法。 Here is the link可能对您有帮助阅读

1

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

第二图案(具有static变量和实例化的第二线)具有static队列,但是在遇到的代码第二线每一次,这将初始化一个新的队列(释放前一当所述下一个是实例化)。

第一种模式是您大概打算使用的模式,仅实例化一次。