Swift 3:使用Grand Central Dispatch实现多线程
自从Swift 3.0开源以来,它是Swift的第一个主要版本,自Swift 3.0到来以来,开发人员正在迅速赶上对核心语言和标准库的所有主要改进和改进。 大的欢迎变化之一是大中央调度 (GCD) 。 在性能,并发性,并行化和线程化方面,GCD是所有Apple平台上最常用的技术之一。
我们使用GCD解决的最常见的问题是在后台线程上运行任务的能力,以便不阻塞在主线程中运行的UI。 应用程序开发中的常见任务是从服务器下载图像,此任务可能需要x倍的时间才能完成,因此,如果您在主线程中运行此任务,则会阻止UI,并且用户将无法再操作该应用程序。 造成不愉快的用户体验,并可能使应用程序崩溃。 我们通过将任务分配给后台线程来解决GCD问题。 GCD通过将任务分配给主线程以外的其他线程或队列来利用CPU的多任务处理功能。
除了GCD,Apple还提供了NSOperationQueue框架来编写并发代码。 两者都旨在封装工作单元并分派它们以执行。 了解每个提供的好处将帮助您决定实施哪个。 在这篇文章中,我将主要关注GCD。
查看这个出色的博客,它解释了GCD和NSOperation的区别和好处。
在NSOperation和中央中央调度之间进行选择– Cocoacasts
自iOS 2起NSOperation和NSOperationQueue自iOS 2可用以来,Grand Central Dispatch(简称GCD)是…… cocoacasts.com
Swift 3对GCD的更改使开发人员更容易,尤其是像我这样的新开发人员更容易回忆起代码并在项目中应用。 在Swift 3发布GCD语法之前,编码风格非常接近底层C,并且与Swift中的任何其他编码风格都明显不同。 新的GCD API主要围绕DispatchQueue旋转。 此类允许创建和修改队列, 同步或异步调度代码等等。
AD ispatchQueue可以是serial ,因此可以一次执行一个工作项,也可以是并发的 ,以使工作项按顺序出队,但可以一次全部运行并且可以按任何顺序完成。 串行队列和并发队列均以先进先出(FIFO)顺序处理工作项。
同步本质上是指“有序”。基本上,当您执行同步操作时,以后出现的所有内容都必须等待操作完成才能开始。
异步或多或少意味着“不按顺序进行”。当您异步执行某项操作时,以下代码可以立即运行,并且异步操作将……运行。 它可能与其他代码在另一个线程上并行运行。 可能只是在同一线程上安排了其他时间。
GCD分派使在后台线程上执行异步操作异常容易。 让我们从我当前正在使用的电影应用程序中查看下面的代码块。 首先,我对OMDB(电影数据库)服务器进行了API调用,如果请求成功,我将解析JSON并更新DispatchQueue.main.async {…}块内的UI。 DispatchQueue块内的任何代码,例如上传电影海报图像,都将在单独的线程上运行,并在完成后更新UI。 在运行此任务时,用户仍然可以不受阻碍地操作应用程序。
- iPad的GroupTableViewBackgroundColor破碎?
- 核心数据手动迁移
- iOS正在进行呼叫时启动图像
- 如何在iOS中使用bzip2格式? 苹果告诉我,bzBuffToBuffDecompress是私有API
- iOS7 XIB问题。 顶部和底部的空白空间
- RestKit数据同步后本地删除问题
- 在iPhone上运行的Sencha Touch应用程序中访问控制台
- connectionDidFinishLoading:不使用[NSURLConnection sendAsynchronousRequest:queue:completionHandler:
- 几个用户获得NSURLErrorServerCertificateUntrusted