swift3多线程之GCD

作者: Cocoaleeo | 来源:发表于2017-05-08 15:15 被阅读69次

多线程可以说ios进阶高级程序员的必修课,swift2的时候GCD还是继承的OC中多线程的C API,在swift3之后为了适用swift的开发模式,所以对GCD进行了更改,详情可以参考Modernize libdispatch for Swift 3 naming conventions
本文主要介绍swift3.0下的多线程更改及使用,废话不多说,进入正题!

先看一下具体转换

** C type** ** Swift type **
dispatch_object_t DispatchObject
dispatch_queue_t DispatchQueue
dispatch_group_t DispatchGroup
dispatch_data_t DispatchData
dispatch_io_t DispatchIO
dispatch_semaphore_t DispatchSemaphore
dispatch_source_t DispatchSource
dispatch_time_t DispatchTime, DispatchWalltime

** 初始化几个对象,方便下文中使用 **

/// 创建队列
let queue = DispatchQueue.init(label: "com.test.myqueue")
/// 创建时间
let queueTime = DispatchTime.init(uptimeNanoseconds: UInt64.init(1))
/// 创建线程组
let groupQueue = DispatchGroup.init()

swift3中引入了DispatchWorkItem, 从名字差不多可以猜出来,这就是一个闭包,其内部还有几个方法

let item = DispatchWorkItem.init {
    print("Hello World")  
}
/// 等待
item.wait()
/// 取消
item.cancel()
/// 通知某个队列干活,使用这个方法时会使在queue队列中的item失效
item.notify(queue: queue) {
       print("该干活了!")
}

正式开始!

1.DispatchQueue

  • 在swift2之前开辟一个异步线程是这样的
dispatch_async(queue) {
    print("Hello World")
}

swift3中已经正式弃用了!
现在我们要这样用

queue.async(execute: { 
    print("Hello World")
})
  • 开辟同步线程
queue.sync {
    print("Hello World")           
}
  • 合起来
DispatchQueue.init(label: "com.test.myqueue").async { 
    print("Hello World")
}
  • 延时操作
/// 使用闭包或者DispatchWorkItem
queue.asyncAfter(deadline: queueTime) {
      print("Hello world")
}
queue.asyncAfter(deadline: queueTime, execute: item)

等会,突然发现这个方法和我想的怎么不一样呢,233333,怎么办呀!

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1, execute: { 
       print("1s 后的世界")    
})

2.DispatchGroup

group的使用方法与OC中几乎完全相同,下面一一来看一下:

  • 将一个队列加入到gorup中
queue.async(group: groupQueue, execute: item)

或者

groupQueue.enter()
queue.async {
       /// do what you want then leave
       groupQueue.leave()
 }
  • 通知主线程刷新界面
groupQueue.notify(queue: DispatchQueue.main) {
       ///  异步工作完成,可以放到主线程刷新UI了
}

总结

总体而言,OC中的cocoa部分在swift中差不多都有对应的方法,在GCD中也是同样的,但swift中对其进行了进一步优化,所以使用起来会感觉更加优雅,本文只是简单介绍了一下gcd的常用方法,在实际项目中往往要复杂的多,各位可以根据实际情况进行使用GCD,共勉!

** 如果觉的本文有用的话,可以顺手点个喜欢!如有疑问,可以在下方留言! **

相关文章

  • iOS开发-Swift3中GCD的使用

    GCD作为iOS开发中多线程实现的一种重要方式,在swift3针对GCD的使用做了一些改进,使其更加面向对象了,在...

  • iOS开发多线程之GCD

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 GCD...

  • iOS开发之GCD并发队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 03 ...

  • iOS开发之GCD同步任务加强

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 004...

  • iOS开发之GCD串行队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 实例d...

  • 7.3 多线程-GCD

    多线程-GCD 多线程-GCD-串行并行 多线程-GCD.png GCD-线程的通讯、延时操作、定时器 GCD-线...

  • GCD

    iOS多线程 Swift4 GCD深入解析swift GCD 的一些高级用法GCD 之线程组(Dispatch G...

  • iOS多线程:『GCD』详尽总结

    iOS多线程:『GCD』详尽总结 iOS多线程:『GCD』详尽总结

  • swift3多线程之GCD

    多线程可以说ios进阶高级程序员的必修课,swift2的时候GCD还是继承的OC中多线程的C API,在swift...

  • Swift3使用GCD和DispatchQueues关于gcd

    关于对gcd 的使用,有几个链接写的还是相当不错的。Swift3使用GCD和DispatchQueueshttp:...

网友评论

    本文标题:swift3多线程之GCD

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