Tag: 中央派遣

Swift的甜蜜点滴:Dispatch框架(iOS 10 +)

iOS SDK具有NSOperation和NSOprerationQueue类,它们是用于异步处理的强大类。 苹果公司推出了Grand Central Dispatch,这是另一种执行多任务处理的高级方法。 本文介绍了快速的Dispatch框架。 原始的GCD库像C库一样使用。 例如,通过调用函数并使用诸如dispatch_queue_create,dispatch_semaphore_create等结构。不幸的是,这可能会排斥某些开发人员或迫使他们编写包装器。 就我而言,我必须开发自己的包装器。 希望iOS10附带的新Dispatch框架将所有GCD功能封装在类中。 现在,它更易于使用,代码也更加简洁。 没有任何不使用它的借口:)。 让我们从Dispatch框架的概述开始 总览 Dispatch框架由用于编写并发代码的类组成。 它支持iOS,macOS,tvOS和watchOS。 在GCD中要理解的主要概念是“ 调度队列 ”。 它是通过块或DispatchWorkItems提交的任务的容器。 调度队列中的任务称为工作项 。 分派队列中的工作项按FIFO顺序拉出。 分派队列可以是串行的,也可以是并发的。 串行队列按顺序依次执行其工作项。 并发队列按FIFO顺序对工作项进行排队,并一次同时运行它们。 在并发调度队列中,我们无法预测工作项的完成顺序。 调度框架允许操纵系统提供的队列: 主队列允许将工作项提交到主线程(或UI线程) 具有不同服务质量的全局并发队列。 DispatchQueue类封装了分派队列概念。 DispatchWorkItem类封装了调度工作项概念。 让我们练习一些DispatchQueue函数。 调度队列 在此示例中,我们在全局队列上同时执行两个循环。 .global()函数返回默认的全局队列。 异步功能意味着执行流程不会等待块完成。 如果要等待块完成,请使用sync()方法。 同步和异步方法都采用不同的参数,最常见的一种是传递一个块。 在这里,我们在不同的QoS队列上执行这些块: 服务质量(QoS)限定了优先级,并有助于系统优化其性能。 从高优先级到低优先级有5种QoS类别排序: 用户互动:这是与主要主题相对应的类。 用户启动的:用户触发的操作不必在主线程上运行。 它等效于DISPATCH_QUEUE_PRIORITY_HIGH。 默认 :默认QoS。 它等效于DISPATCH_QUEUE_PRIORITY_DEFAULT。 实用程序 :用于依赖于系统资源(例如文件和网络I / O)的调度项目。 它等效于DISPATCH_QUEUE_PRIORITY_LOW。 背景 :用于优先级较低的任务。 […]