我对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 :(得分:1)
这两者完全不同。第一个(使用dispatch_once
)懒惰地实例化下载队列的一个实例。如果再次调用它,则只会在您第一次调用它时再次调用dispatch_once
块。当您想要确保只有一个且只有一个对象实例(在这种情况下是一个队列)时,这是一个非常有用的模式。
第二个模式(带有static
变量并在第二行实例化)具有static
队列,但每次遇到第二行代码时,它都会实例化一个新队列(释放前一个实例化下一个。)
第一种模式是您可能想要的模式,只能实例化一次。
答案 1 :(得分:0)
dispatch_once
没有没有太大差异,因为你可以看到有方法编程方法。Here is the link可能对你有帮助阅读