开始学习核心数据和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。
The dispatch_get_global_queue
(DispatchQueue.global()
在 Swift 中)为您提供一个后台队列,您可以在其中调度异步运行的后台任务(即不会阻塞您的用户界面)。如果您最终向全局队列提交多个块,这些作业可以同时运行。如果您有多个代码块想要提交到必须在后台按顺序运行的后台队列(不经常需要),您可以创建自己的串行后台队列并分派到该队列,但如果并发后台操作是可以接受,然后利用自己dispatch_get_global_queue
方便/高效。
但请注意,您不允许在后台队列中执行用户界面更新,因此dispatch_async
to the dispatch_get_main_queue
(i.e. DispatchQueue.main.async { ... }
在 Swift 中)让后台队列在主队列可用时将用户界面更新分派回主队列。
这是一种非常常见的编程模式:提交一些内容在后台运行,当需要执行用户更新时,将更新分派回主队列。
欲了解更多信息,请参阅并发编程指南 http://developer.apple.com/library/ios/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html#//apple_ref/doc/uid/TP40008091-CH102-SW1.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)