objective-c - 了解 dispatch_async

我对这段代码有疑问

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSData* data = [NSData dataWithContentsOfURL: 
      kLatestKivaLoansURL];
    [self performSelectorOnMainThread:@selector(fetchedData:) 
      withObject:data waitUntilDone:YES];
});

这段代码的第一个参数是

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) 

我们是否要求这段代码在全局队列上执行串行任务,其定义本身是它返回给定优先级的全局并发队列?

在主队列上使用 dispatch_get_global_queue 有什么优势?

我很困惑。请您帮助我更好地理解这一点。

最佳答案

在主队列上使用默认队列的主要原因是在后台运行任务。

例如,如果我正在从 Internet 下载文件并且我想更新用户的下载进度,我将在优先级默认队列中运行下载并异步更新主队列中的 UI。

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
    //Background Thread
    dispatch_async(dispatch_get_main_queue(), ^(void){
        //Run UI Updates
    });
});

https://stackoverflow.com/questions/16283652/

相关文章:

ios - 将 NSString 转换为 NSDate(然后再返回)

ios - 从 "bouncing"垂直停止 UIWebView?

objective-c - 实现 API 时如何避免在 block 中捕获 self ?

ios - 卸载应用程序时删除钥匙串(keychain)项目

iphone - 如何在我的 iPhone 应用程序中使用 NSError?

objective-c - 开始使用 instancetype 而不是 id 会有好处吗?

ios - 在一个 UITableViewCell 上隐藏分隔线

ios - 如何在 iOS 上进行 base64 编码?

ios - 突出显示时如何更改 UIButton 的背景颜色?

ios - 使 UINavigationBar 透明