设为首页 加入收藏

TOP

在Swift中应用Grand Central Dispatch(上)转载自的goldenfiredo001的博客(六)
2017-10-13 10:33:32 】 浏览:7635
Tags:Swift 应用 Grand Central Dispatch 转载 goldenfiredo001 博客
oad的UIViewController类。
2. viewDidLoad在主线程中执行。
3. dispatch_sync闭包被加入到全局队列中稍后执行。主线程停下来等待闭包完成。同时,全局队列正在并发执行任务;记住闭包以FIFO的顺序从全 局队列中取出,但是会并发地执行。全局队列首先处理dispatch_sync闭包加入前已经存在队列中的任务。
4. 最后,轮到dispatch_sync闭包执行。
5. 闭包执行完毕,主线程得以继续。
6. viewDidLoad方法完成,主队列接着处理其它任务。

dispatch_sync把任务加入队列并一直等待其完成。dispatch_async做了差不多的工作,只是它不会等待任务完成,而是转而去继续其他工作。

重访dispatch_async

1
2
3
4
5
6
7
8
9
10
11
12
override func viewDidLoad() {
   super .viewDidLoad()
  
   dispatch_async(dispatch_get_global_queue(
       Int(QOS_CLASS_USER_INTERACTIVE.value), 0)) {
  
     NSLog( "First Log" )
  
   }
  
   NSLog( "Second Log" )
}

70.gif

1.主队列按部就班的执行任务 —— 紧接着的任务是实例化包含viewDidLoad的UIViewController类。

2.viewDidLoad在主线程中执行。

3.dispatch_async闭包被加入到全局队列中稍后执行。

4.viewDidLoad在dispatch_async后继续向下执行,主线程继续其他任务。同时,全局队列正在并发执行任务;记住闭包以FIFO的顺序从全局队列中取出,但是会并发地执行。

5.执行dispatch_async所添加的闭包。

6.dispatch_async闭包完成,NSLog输出到控制台。

在这个特别的例子中,第一个NSLog在第二个NSLog后执行。事实并非总是如此——这取决于硬件在彼时正在做什么,你无法控制或知晓哪个语句会先执行。“第一个”NSLog在某种调用情况下可能会先执行。

下一步?

在本教程中,你已经学到了如何编写线程安全的代码以及如何在保持主线程响应性的前提下执行CPU密集型的任务。

可以下载GooglyPuff,里面包含了本教程中所做的所有改进。教程的第二部分会在此基础上继续改进。

首页 上一页 3 4 5 6 下一页 尾页 6/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS开发代码规范(通用) 下一篇iOS动画

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目