swift__多线程GCD详解

swift__多线程GCD详解,第1张

概述//  GCD详解 //  目录: //  1. 创建GCD队列(最常用) //  2. 自定义创建队列 //  3. 使用多线程实现延迟加载 //  4. 使用多线程实现重复(循环) //  5. 使用多线程来控制 多任务数据加载 和 UI 的显示的先后顺序 //  6. 暂停队列 //  7. 恢复队列 // import UIKit class ViewController: UIViewC

// GCD详解

// 目录:

// 1. 创建GCD队列(最常用)

// 2. 自定义创建队列

// 3. 使用多线程实现延迟加载

// 4. 使用多线程实现重复(循环)

// 5. 使用多线程来控制 多任务数据加载 UI 的显示的先后顺序

// 6. 暂停队列

// 7. 恢复队列

//

import UIKit


class VIEwController: UIVIEwController {

@IBOutlet var myLable:UILabel?

@IBAction func clickbutton(){


// 1. 创建GCD队列(最常用)

/* 第一个参数为队列优先级。有以下(优先级从上到下依次降低)

* - disPATCH_QUEUE_PRIORITY_HIGH:

* - disPATCH_QUEUE_PRIORITY_DEFAulT: 多用默认

* - disPATCH_QUEUE_PRIORITY_LOW:

* - disPATCH_QUEUE_PRIORITY_BACKGROUND:

* 第二个参数为预留参数,一般为0

*/

let myQueue:dispatch_queue_t = dispatch_get_global_queue(disPATCH_QUEUE_PRIORITY_DEFAulT,0)

// 用异步的方式运行队列里的任务

dispatch_async(myQueue,{

self.sendData1()

})

//--------------------------------分隔符------------------------------------>

// 2. 自定义创建队列

/*

第一个参数,是创建队列的一个标签

第二个参数,是创建队列的类型,有以下两种:

--> disPATCH_QUEUE_SERIAL (串行队列)

--> disPATCH_QUEUE_CONCURRENT (并行队列)

let myQueue1:dispatch_queue_t = dispatch_queue_create("www.yunshow.com",disPATCH_QUEUE_CONCURRENT)

// 用异步的方式运行队列里的任务

dispatch_async(myQueue1) { () -> VoID in

self.sendData1()

}

//--------------------------------分隔符------------------------------------>

// 3. 使用多线程实现延迟加载

/*

第一个参数,表示从何时开始,disPATCH_TIME_Now 表示从现在开始

第二个参数,NSEC_PER_SEC 是用来将2秒时间转化为GCD的参数

let myTime : dispatch_time_t = dispatch_time(disPATCH_TIME_Now,(Int64)(NSEC_PER_SEC * 2))

dispatch_after(myTime,dispatch_get_main_queue()) { () -> VoID in

self.sendData1()

}

@H_834_301@ // 4. 使用多线程实现重复(循环)

/*

第一个参数,表示循环的次数

*/

dispatch_apply(3,dispatch_get_global_queue(disPATCH_QUEUE_PRIORITY_DEFAulT,0)) { (UIntindex) -> VoID in

print(index)

}

}

func sendData(){

sleep(5)

}


func updateLable(){

myLable?.text = "数据发送成功"

}

func sendData1(){

sleep(5)

// 在主线程中更新UI

dispatch_async(dispatch_get_main_queue(),{

self.updateLable()

})

}

//--------------------------------分隔符------------------------------------>

// 5. 使用多线程来控制 多任务数据加载 UI 的显示的先后顺序

@IBOutlet var myImage1: UIImageVIEw?

@IBOutlet var myImage2: UIImageVIEw?

@IBOutlet var myLable1: UILabel?

@IBAction func clickSend(){

// 创建自定义调度组

let myGroup = dispatch_group_create()

// 使用调度组的异步方法将第一个任务放入

dispatch_group_async(myGroup,dispatch_get_main_queue()) { () -> VoID in

// 从网络中加载图片1 的数据

let myDate = NSData(contentsOfURL: NSURL(string: "")!)

// UIImageVIEw 更新加载好的图片,UI更新应该放在主线程中异步加载

dispatch_async(dispatch_get_main_queue(),{ () -> VoID in

self.myImage1?.image = UIImage(data: myDate!)

})

}

// 使用调度组的异步方法将第二个任务放入

// 从网络中加载图片2 的数据

let myDate1 = NSData(contentsOfURL: NSURL(string: "")!)

VoID in

self.myImage2?.image = UIImage(data: myDate1!)

})

}

// notify(异步) 等待通知,即等待组内的任务都完成手再执行这个线程的任务

// wait (同步,会阻塞线程) 也是等待通知

// 注意: 在更新数据库 *** 作时候,多使用 wait,其他时间多使用 notify

dispatch_group_notify(myGroup,dispatch_get_main_queue()) { () -> VoID in


// 在两张图片都加载完毕时,在lable中显示加载完毕

self.myLable1?.text = "加载完毕"

}

dispatch_group_wait(myGroup,disPATCH_TIME_FOREVER)

self.myLable1?.text = "加载完毕"

}

//--------------------------------分隔符------------------------------------>

let myQueue: dispatch_queue_t = dispatch_queue_create("www.yunshow.com",disPATCH_QUEUE_CONCURRENT)

@IBAction func clickSuspend(){

// 6. 暂停队列 (注意:只能暂停自定义队列,不能暂停主队列和系统队列)

dispatch_suspend(myQueue)

}

@IBAction func clickResume(){

// 7. 恢复队列 (注意:对已经暂停的队列才能恢复)

dispatch_resume(myQueue)

}

overrIDe func vIEwDIDLoad()

{

super.vIEwDIDLoad()

}


overrIDe func dIDReceiveMemoryWarning()

{

super.dIDReceiveMemoryWarning()

}

}

总结

以上是内存溢出为你收集整理的swift__多线程GCD详解全部内容,希望文章能够帮你解决swift__多线程GCD详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1080772.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存