美文网首页
swift3.0 -- GCD

swift3.0 -- GCD

作者: MRNAN_ | 来源:发表于2016-10-17 15:43 被阅读38次

1. 自己创建队列

构造函数
/* 
- label : 队列的名称 - attributes : 队列的属性 
* public static let serial: DispatchQueueAttributes // 串行 
* public static let concurrent: DispatchQueueAttributes // 并发 
* public static let initiallyInactive: DispatchQueueAttributes 
* public static let autoreleaseInherit: DispatchQueueAttributes 
* public static let autoreleaseWorkItem: DispatchQueueAttributes 
* public static let autoreleaseNever: DispatchQueueAttributes
* public static let qosUserInteractive: DispatchQueueAttributes // 用户交互(希望尽快完成,用户很希望得到结果。个人觉得这个和主线的的线程优先级是一样的)
* public static let qosUserInitiated: DispatchQueueAttributes // 用户期望优先级(不要放太耗时的操作)
* public static let qosDefault: DispatchQueueAttributes // 默认优先级(一般不是给程序员实用的,用来重置队列用的)
* public static let qosUtility: DispatchQueueAttributes // 实用工具优先级别(耗时操作,可以使用这个)
* public static let qosBackground: DispatchQueueAttributes // 后台优先级 
(只有最前的两个牵扯到队列的 串行和并行。 其余的都和线程的优先级设置有关)
- DispatchQueue : 队列(没有相关文字说明这是干什么的)
*/
public convenience init(label: String, attributes: DispatchQueueAttributes = default, target: DispatchQueue? = default)

2. 全局队列的一些说明

/** 类方法提供了默认的参数,当我们给不传参数的时候,使用的是默认参数;
    attributes: DispatchQueue.GlobalAttributes = default :
*/
public class func global(attributes: DispatchQueue.GlobalAttributes = default) -> DispatchQueue // 获取主队列的参数 结构体
  public struct GlobalAttributes : OptionSet {
  public let rawValue: UInt64 
  public init(rawValue: UInt64) 

// 服务质量 
   public static let qosUserInteractive: DispatchQueue.GlobalAttributes 
   public static let qosUserInitiated: DispatchQueue.GlobalAttributes 
   public static let qosDefault: DispatchQueue.GlobalAttributes 
   public static let qosUtility: DispatchQueue.GlobalAttributes 
   public static let qosBackground: DispatchQueue.GlobalAttributes 

// 在 swift3.0 中已经废弃了的 ,除了第一个以外和上面是一一对应的。 
   public static let priorityHigh: DispatchQueue.GlobalAttributes 
   public static let priorityDefault: DispatchQueue.GlobalAttributes 
   public static let priorityLow: DispatchQueue.GlobalAttributes 
   public static let priorityBackground: DispatchQueue.GlobalAttributes 
}
// 这一段大家应该很熟悉。老版本的 objc 中 GCD 的文档说明  
* It is recommended to use quality of service class values to identify the 
* well-known global concurrent queues: 
* 推荐使用服务质量类去标识 全局并发队列 
* - QOS_CLASS_USER_INTERACTIVE // 用户交互(希望尽快完成,用户对结果比较期望,不能放耗时操作 (我觉得和主队列是一个级别的)) 
* - QOS_CLASS_USER_INITIATED // 用户期望 (不能放太耗时操作) 
* - QOS_CLASS_DEFAULT // 默认(不是给程序员使用,用来重置队列)  
* - QOS_CLASS_UTILITY // 实用工具(耗时操作可以放在这个线程中)  
* - QOS_CLASS_BACKGROUND // 后台 
* 
* The global concurrent queues may still be identified by their priority, 
* which map to the following QOS classes: 
* 全局并发队列可能仍然通过 priority 进行表示。下面是 服务质量的映射: 
* - DISPATCH_QUEUE_PRIORITY_HIGH: QOS_CLASS_USER_INITIATED 
* - DISPATCH_QUEUE_PRIORITY_DEFAULT: QOS_CLASS_DEFAULT 
* - DISPATCH_QUEUE_PRIORITY_LOW: QOS_CLASS_UTILITY 
* - DISPATCH_QUEUE_PRIORITY_BACKGROUND: QOS_CLASS_BACKGROUND
// 还有这一段
#define DISPATCH_QUEUE_PRIORITY_HIGH 2 (搞优先级, 值为 2)
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 (默认优先级, 值为 0)
#define DISPATCH_QUEUE_PRIORITY_LOW (-2) (低优先级, 值为 -2)
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN (后台优先级,在高优先级执行完毕后值优先级的值 为 2)
在 swift 2.2 版本中 dispatch_sync(dispatch_get_global_queue(0, 0) // 基本可以看出这里为什么填 0 ,0 (第二个参数没有启用填任何数都可以,习惯填 0 )

文/潇小溅(简书作者)原文链接:http://www.jianshu.com/p/f042432e2d7d著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

3. 获取一个队列

我们使用 DispatchQueue.global() 获取一个系统的队列,这样的话获取的就是默认.default 优先级的队列了,如果要获取其他优先级的队列,就使用DispatchQueue.global(qos: .userInitiated) ,最后,我们使用 .async {}来执行代码:

DispatchQueue.global(qos: .userInitiated).async {
            //your code here
        }

4. 创建一个队列

直接用 DispatchQueue 的初始化器来创建一个队列。最简单直接的办法是这样:

let queue = DispatchQueue(label: "myBackgroundQueue")

复杂一点?你可以指定优先级以及队列类别:

let queue = DispatchQueue(label: "myBackgroundQueue", qos: .userInitiated, attributes: .concurrent)

然后把代码放进去即可:

queue.async {
    print("aaa")
}

相关文章

  • swift中GCD的使用详情

    想看swift3.0使用GCD,请点击GCD详解 想看swift3.0闭包的使用和介绍,请点击Swift版闭包使用...

  • iOS多线程-GCD(Swift)

    GCD准确的来讲应该叫做并发编程技术,因为swift3.0后GCD使用方式有很大的变化这里用Swift来重新整理一...

  • swift3.0 GCD

    随着苹果推出swift3.0,很多API都发生了变化,下面我就来总结下GCD的一些常用API用法。 首先为了方便先...

  • swift3.0 -- GCD

    1. 自己创建队列 2. 全局队列的一些说明 3. 获取一个队列 我们使用 DispatchQueue.globa...

  • swift3.0 GCD 笔记

    iOS 下的多线程编程技术从底层往上分别是 NSThread、NSOperation、Grand Central ...

  • Swift3.0之后GCD定时器如何创建

    Swift3.0很多语法都有变化,GCD的定时器也发生了变化 1.首先,创建定时器,和之前的有所不同,代码如下: ...

  • Swift3.0 中的GCD

  • swift3.0 GCD的使用

    取消过去的接口 说起 GCD, 大家肯定回想起类似 dispatch_async 这样的语法,这个语法在swift...

  • Swift3.0中的GCD

    swift 3中对C层级的GCD的API进行了彻头彻尾的改变。本文将从实际使用场景来了解一下新的api使用。 di...

  • Swift3.0中的 GCD之串行并行同步异步

    之前有写过关于 GCD的东西(地址),但是最近又把自己弄迷糊了.所以有在 swift3.0的语法下重新理解一下关于...

网友评论

      本文标题:swift3.0 -- GCD

      本文链接:https://www.haomeiwen.com/subject/ggtzyttx.html