- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
开始学习核心数据和 dispatch_async。有一段代码可以从一组数据中获取图像的 url 并将其设置为核心数据的模型,如下所示
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSString *urlString = [[[photoDictionary valueForKey:@"images"] objectAtIndex:0] valueForKey:@"url"];
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]];
dispatch_async(dispatch_get_main_queue(), ^{
[photoModel setValue:imageData forKey:@"photoImageData"];
有人可以向我解释为什么我们使用 dispatch_get_global_queue
作为外部 dispatch_async 和 dispatch_get_main_queue
作为内部 dispatch_async。
最佳答案
dispatch_get_global_queue
(在 Swift 中为 DispatchQueue.global()
)为您提供一个后台队列,您可以在该队列上调度异步运行的后台任务(即不会阻塞您的用户界面)。如果您最终将多个 block 提交到全局队列,这些作业可以同时运行。如果您有多个代码块要提交到必须在后台按顺序运行的后台队列(不经常需要),您可以创建自己的串行后台队列并分派(dispatch)到该队列,但如果并发后台操作是可以接受,然后利用 dispatch_get_global_queue
方便/高效。
但请注意,您不能在后台队列中执行用户界面更新,因此 dispatch_async
到 dispatch_get_main_queue
(即 DispatchQueue .main.async { ... }
in Swift)让后台队列在主队列可用后将用户界面更新分派(dispatch)回主队列。
这是一种非常常见的编程模式:提交一些东西在后台运行,当它需要执行用户更新时,将更新分派(dispatch)回主队列。
有关详细信息,请参阅 Concurrency Programming Guide .
关于objective-c - dispatch_get_global_queue vs dispatch_get_main_queue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12693197/
以下代码: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ for (int i=0
我有这行代码: let queue = dispatch_get_global_queue(DISPATCH_QUEUE_CONCURRENT, 0); 我收到错误 Cannot invoke dis
我有这个简单的异步代码。 class MyClass { func myFunc() { dispatch_async(dispatch_get_global_queue(DI
在选择要在哪个队列上运行 dispatch_async 时,经常会提到 dispatch_get_global_queue。这是一个将任务委托(delegate)给特定线程的特殊后台队列吗?是不是差不
我继承了一个使用以下线程结构的代码库: dispatch_async(dispatch_get_main_queue(), { () -> Void in dispatch_async(dis
这个问题在这里已经有了答案: How do I dispatch_sync, dispatch_async, dispatch_after, etc in Swift 3, Swift 4, and
我刚刚开始在 iOS 上工作,并且一直在浏览 GCD 上的 Apple 引用资料。 dispatch_get_global _queue 返回一个并发队列,可以向其中提交要执行的 block 。 但是
我正在编写一个中等复杂的 iOS 程序,它需要有多个线程来执行一些较长的操作(解析、连接到网络等)。但是,我对 dispatch_get_global_queue 和 dispatch_queue_c
开始学习核心数据和 dispatch_async。有一段代码可以从一组数据中获取图像的 url 并将其设置为核心数据的模型,如下所示 dispatch_async(dispatch_get_globa
苹果的文档说,dispatch_get_global_queue()是并发队列,dispatch_sync是串行的意思,那么任务是异步处理还是同步处理? 最佳答案 您对什么是队列以及异步与同步的含义感
虽然使用 GCD 为后台线程创建的普通队列需要 dispatch_release 来释放对象的内存,但获取全局队列是否也需要做同样的事情,因为释放全局队列可能会导致操作系统出现问题我问:持有对由 di
我有一个表格 View ,其中我显示了 3 个单元格,并且取决于像分页一样工作的 Collection View 单元格。所以当我想从 dispatch_async(dispatch_get_glob
我有以下使用 block 获取联系人的代码片段: if (&ABAddressBookCreateWithOptions != NULL) { CFErrorRef error
let downloadGroup = dispatch_group_create() var images = [UIImage]() var errors = [NSError](
// Method called when a button is clicked - (void)handleClickEvent { dispatch_sync(dispatch_ge
我是一名优秀的程序员,十分优秀!