前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS学习笔记——GCD

iOS学习笔记——GCD

作者头像
Oceanlong
发布2018-07-03 13:21:55
2800
发布2018-07-03 13:21:55
举报

前言

当App需要进行计算量较大或耗时较长的工作时,多线程计算就必不可少。iOS为我们提供了一个比较方式的异步任务工具类——GCD。

GCD类似于一个线程池。我们设置好对应的模式,然后将任务放入等待队列即可。

基本概念

队列

一个存放任务的数据结构,队列遵循FIFO模式。队列分为并行队列串行队列

// 创建了一个标签是”queue0“、执行优先级为.default的并行队列
let queue0 = DispatchQueue(label: "queue0", qos: .default, attributes: .concurrent)
// label:队列标签
// qos:设置队列的优先级
// attributes:队列形式:默认串行,设置为.concurrent代表是并行队列
  • 串行队列
let queue2 = DispatchQueue(label: "queue2")
  • 并行队列
let queue1 = DispatchQueue(label: "queue1", attributes: .concurrent)

系统也为我们提供了一个公共的并行队列,获取方式:

DispatchQueue.global()

此外,主线程就是一个串行队列。

DispatchQueue.main

任务

任务就是一个代码块,用来实现我们需要的计算逻辑。我们使用时,将其放入队列中执行。

快速使用

        // 同步执行
        queue1.sync {
            for i in 100...110 {
                print("?\(i)")
            }
            print("1:\(Thread.current)")
        }
        // 异步执行
        queue1.async {
            for i in 1000...1010 {
                print("?\(i)")
            }
            print("1:\(Thread.current)")
        }

同步、异步、串行、并行

GCD运行方式

DispathWorkIten

当我们需要进行精确的任务先后关系控制时,我们可以用DispathWorkIten来实现。

// 队列1
let queue1 = DispatchQueue(label: "queue1")
   
// 任务1
let work1 = DispatchWorkItem {
  for i in 1...10 {
      print("?\(i)")
  }
  print("1:\(Thread.current)")
  
}
   
// 任务2
let work2 = DispatchWorkItem {
  for i in 1000...1010 {
      print("?\(i)")
  }
  print("2:\(Thread.current)")
}
   
   
// 第一种绑定方式
work1.notify(queue: queue1) {
  // 执行2
  work2.perform()
}
    
// 第二中绑定方式
work1.notify(queue: queue1, execute: work2)
    
// 第三种可以直接不创建work2,在闭包中执行work的工作
work1.notify(queue: queue1) {
  for i in 1000...1010 {
      print("?\(i)")
  }
  print("2:\(Thread.current)")
}
   
// 执行任务:
// 方式1:任务放在队列中并执行
queue1.async(execute: work1)
// 方式2:如果不指定队列,会在当前的队列中执行,如果在主线程中执行会造成线程阻塞
work1.perform()

如有问题,欢迎指正。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.02.02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 基本概念
    • 队列
      • 任务
      • 快速使用
        • 同步、异步、串行、并行
        • DispathWorkIten
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档