IOS多线程多线程

iOS多线程-GCD(Swift)

2017-08-26  本文已影响237人  天外丶飞仙

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

开发中常见代码

GCD核心概念

将任务添加到队列,指定任务执行的方法。

同步任务

利用同步任务,能够做到任务依赖关系,前一个任务是同步任务,这个任务不执行完,队列就不会调度后面的任务。(应用场景是要等待一个任务执行完再去执行其他的任务)

全局队列

let globalQueue = DispatchQueue.global()

主队列

let globalQueue = DispatchQueue.main

延迟执行

//延迟1秒在子线程中异步执行
DispatchQueue.global().asyncAfter(deadline: DispatchTime.now() + 1) {
        print(Thread.current)
}

一次执行

Swift3以后原有的Dispatch once已经被废弃了。这里就用OC来写代码例子,在OC用dispatch_once来写单例还是应用的很多的。(ps:Swift写单例真的比OC方便很多)

static dispatch_once_t onceToken;
 NSLog(@"%ld",onceToken);
//苹果推荐使用 gcd 一次执行,效率高
dispatch_once(&onceToken, ^{
    //只会执行一次!!
      NSLog(@"执行了%@",[NSThread currentThread]);
 });

调度组

用一个调度组,可以监听全局队列的任务,主队列去执行最后的任务

//调度组
let group = DispatchGroup()
//添加任务,让队列调度,任务执行情况,最后通知群组
DispatchQueue.global().async(group: group, qos: .default, flags: [], execute: { 
            
       print("下载1")
})
DispatchQueue.global().async(group: group, qos: .default, flags: [], execute: {
            
     print("下载2")
})
DispatchQueue.global().async(group: group, qos: .default, flags: [], execute: {
            
      print("下载3")
 })
//所有任务执行完毕后,通知
 group.notify(queue: DispatchQueue.main) { 
            
      print("回到主队列更新UI")
 }
上一篇 下一篇

猜你喜欢

热点阅读