iOS多线程(GCD)(swift)
实现iOS多线程主要有三种方式
一、GCD
他是苹果设计的在底层管理线程的方法 GCD最主要的概念就是队列,可分为两种类型,一为串行队列,二为并行队列,开发时用到的有三种队列:主队列、全局队列、自定义队列
1、创建gcd队列
let myQueue:dispatch_queue_t =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)
//第一个参数是优先级
//用异步方式执行队列里的方法
dispatch_async(myQueue, { () ->Void in
//任务
})
2、自定义队列
let myqueue2:dispatch_queue_t = dispatch_queue_create("xindong.com",
DISPATCH_QUEUE_CONCURRENT)
//最后一个参数指的是并行的队列,还有一个是DISPATCH_QUEUE_SERIAL(串行)
3、延迟执行
let myTime:dispatch_time_t=dispatch_time(DISPATCH_TIME_NOW,
(Int64)(NSEC_PER_SEC*2))
//后面那个参数代表两秒,苹果公司建议这样写,这是转化为gcd能读懂的时间
dispatch_after(myTime,dispatch_get_main_queue(), { () ->Void in
//任务
})//苹果公司建议用主队列
4、多次执行
dispatch_apply(3,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0))
{ (UInt index) -> Voidin
//任务
}//执行3次,一般放在并行队列中
//他是一个同步操作会阻塞主线程,所以一般放在异步执行的代码里
5、调度组
let mygroup =dispatch_group_create()//创建调度组
dispatch_group_async(mygroup, myQueue) { () ->Void in
//异步执行调度组里面的内容
//加载图片数据
dispatch_async(dispatch_get_main_queue(), { () ->Void in
//主线程更新ui
})
} dispatch_group_notify(mygroup,dispatch_get_main_queue()) { () ->Void in
//这个方法在调度组里面的内容全部执行完毕后调用
}
dispatch_group_wait(mygroup,DISPATCH_TIME_FOREVER)
//一直等到调度组执行完,在执行下面的,这是一个同步操作,会阻塞主线程
6、暂停队列
dispatch_suspend(myQueue)//不能暂停主队列和系统队列
7、恢复队列
dispatch_resume(myQueue)