swift详解之十六-----------GCD基础部分
GCD基础部分
GCD (Grand Central Dispatch)
系统同时提供给你好几个并发队列。它们叫做 全局调度队列(Global Dispatch Queues) 。目前的四个全局队列有着不同的优先级:background、low、default 以及 high。要知道,Apple 的 API 也会使用这些队列,所以你添加的任何任务都不会是这些队列中唯一的任务。 最后,你也可以创建自己的串行队列或并发队列。这就是说,至少有五个队列任你处置:主队列、四个全局调度队列,再加上任何你自己创建的队列。GCD 的“艺术”归结为选择合适的队列来调度函数以提交你的工作。 下面看下示例 let back = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0);
let defual = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
let high = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0);
let low = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,0);
dispatch_async(back) {
//后台执行
}
dispatch_async(defual) {
//后台执行
}
dispatch_async(low) {
//后台执行
}
dispatch_async(high) {
//后台执行
}
上面是全局后台执行的几种类型。可以设定级别 下面看看主线程。多用来刷新UI dispatch_async(dispatch_get_main_queue()) {
//主线程执行
}
用户队列 let queue = dispatch_queue_create("myQueue",nil);
dispatch_async(queue) {
//后台执行
}
下面是延时执行 let time = NSEC_PER_SEC*3
let popTime = dispatch_time(DISPATCH_TIME_NOW,Int64(time))
print(NSEC_PER_SEC)
dispatch_after(popTime,dispatch_get_main_queue()) {
//这里的内容在3秒后执行
print(2)
}
print(1)
这里NSEC_PER_SEC = 1000000000 dispatch_once 在单例模式中很有用哦 , 不用if判断。加上这个就能保证 只执行一次了 func onlyOnce(){
struct Static {
static var onceToken : dispatch_once_t = 0
}
dispatch_once(&Static.onceToken) {
print("只会输出一次哦")
}
print("多次输出呀")
}
这里static变量保证用的是同一个token onlyOnce()
onlyOnce()
onlyOnce()
onlyOnce()
onlyOnce()
然后我们多次调用 。 只会输出一次哦 多次输出呀 多次输出呀 多次输出呀 多次输出呀 多次输出呀 dispatch_once中的代码只执行了一次 。 以上就是今天总结的GCD基础部分 。下次总结下高级部分 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |