美文网首页
DispatchQueue

DispatchQueue

作者: 曹来东 | 来源:发表于2019-08-12 16:38 被阅读0次
    • DispatchQueue 分为串行和并发,它的完整初始化方法为:
      DispatchQueue.init(label: String, qos: DispatchQoS, attributes: DispatchQueue.Attributes, autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency, target: DispatchQueue?)
      可见,这些参数中,除了label,其它都有默认值(label表示该队列的标签,建议传值为反向域名字符串,如:com.onevcat.Kingfisher.Animator.preloadQueue)。
      当除label外的参数都使用默认值时,初始化方法返回的便是串行队列。如果需要返回并发队列,参数attributes传值为.concurrent即可。DispatchQueue.Attributes 是一个结构体类型,该结构体提供了两个静态变量:concurrent和initiallyInactive(注意,没有代表串行队列的静态变量)。如果attributes参数传值为initiallyInactive, 任务不会自动执行,而是需要开发者手动调用activate()触发。但是代码依然是串行进行的,如果想要手动触发、并行执行任务,可以指定attributes参数接受一个数组: [.concurrent, .initiallyInactive]。
      DispatchQoS:是一个结构体 代表队列的优先级,有6中可选值.优先级从高到低依次为
             public static let userInteractive: DispatchQoS
             public static let userInitiated: DispatchQoS
             public static let utility: DispatchQoS
             public static let background: DispatchQoS
             //default和unspecified优先级介于userInteractive和background
             //之间,具体优先级有系统决定.
             public static let `default`: DispatchQoS
             public static let unspecified: DispatchQoS
    

    DispatchQueue.AutoreleaseFrequency有三种属性值:.inherit、.workItem和.never。

    • .inherit:不确定,之前默认的行为也是现在的默认值
    • .workItem:为每个执行的任务创建自动释放池,项目完成时清理临时对象
    • .never:GCD不为您管理自动释放池
      参数target 用于指定即将创建的队列与队列target优先级相同。也可通过setTarget(queue: DispatchQueue?)函数指定与queue相同的优先级。
      除了开发者自己创建队列,还可以通过DispatchQueue.main获取主队列(主队列也属于串行队列)、DispatchQueue.global(qos: DispatchQoS.QoSClass) 获取全局并发队列。

    相关文章

      网友评论

          本文标题:DispatchQueue

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