dispatch_once异步处理用法
Usage of dispatch_once usage for asynchronous processing
我对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);
dispatch_once
没有那么大的区别,你可以看到有编程方法的方法。Here is the link可能对你阅读有帮助
这两个是完全不同的。第一个(dispatch_once
)懒惰地实例化下载队列的一个实例。如果再次调用,dispatch_once
块将不会再次调用,只会在第一次调用时调用。当您想要确保您有一个且只有一个相关对象实例(在本例中为队列)时,这是一种非常有用的模式。
第二个模式(带有 static
变量并在第二行实例化)有 static
队列,但每次遇到第二行代码时,它都会实例化一个新队列(在实例化下一个时释放前一个。
第一个模式是您可能想要的模式,只实例化一次。
我对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);
dispatch_once
没有那么大的区别,你可以看到有编程方法的方法。Here is the link可能对你阅读有帮助
这两个是完全不同的。第一个(dispatch_once
)懒惰地实例化下载队列的一个实例。如果再次调用,dispatch_once
块将不会再次调用,只会在第一次调用时调用。当您想要确保您有一个且只有一个相关对象实例(在本例中为队列)时,这是一种非常有用的模式。
第二个模式(带有 static
变量并在第二行实例化)有 static
队列,但每次遇到第二行代码时,它都会实例化一个新队列(在实例化下一个时释放前一个。
第一个模式是您可能想要的模式,只实例化一次。