GCD的介绍与使用(四)
来源:互联网 发布:olay多效修护霜 知乎 编辑:程序博客网 时间:2024/05/01 10:09
GCD的介绍与使用(四)
1、 Main Dispatch Queue
是在主线程中执行任务的Dispatch Queue。因为主线程只有1个,所以Main Dispatch Queue是Serial Dispatch Queue。 追加到Main Dispatch Queue中的任务将在主线程的RunLoop中执行。 因为是在主线程中执行,所以应该只将用户界面更新等一些必须在主线程中执行的任务追加到Main Dispatch Queue中。
dispatch_queue_t dispatch_main_queue = dispatch_get_main_queue();
2、 dispatch_group_async的使用
dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他的操作。 这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知界面说完成的了。
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, queue, ^{ [NSThread sleepForTimeInterval:6]; NSLog(@"group1 [NSThread sleepForTimeInterval:6];"); }); dispatch_group_async(group, queue, ^{ [NSThread sleepForTimeInterval:3]; NSLog(@"group2 [NSThread sleepForTimeInterval:3];"); }); dispatch_group_async(group, queue, ^{ [NSThread sleepForTimeInterval:1]; NSLog(@"group3 [NSThread sleepForTimeInterval:1];"); }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ NSLog(@"main thread."); });
这相当于把放在线程队列中的任务,归类成一个组,当这个组中的任务全部完成后, 才会调用使用dispatch_group_notify的线程任务。
3、dispatch_barrier_async的使用
dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:3]; NSLog(@"dispatch_async1"); }); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:1]; NSLog(@"dispatch_async2"); }); dispatch_barrier_async(queue, ^{ NSLog(@"dispatch_barrier_async"); [NSThread sleepForTimeInterval:0.5]; }); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:1]; NSLog(@"dispatch_async3"); });
这是一个global_queue,放入其中的任务是并发的,使用dispatch_barrier_async可以保证,在其之前的任务完成后执行,在其之后的任务等到其完成后执行。上面的代码 dispatch_barrier_async 会在dispatch_async1和dispatch_async2执行完后执行,dispatch_async3会在dispatch_barrier_async执行完后执行。
0 0
- GCD的介绍与使用(四)
- GCD的介绍与使用(三)
- GCD的介绍与使用(六)
- GCD介绍(四): 完结
- GCD介绍(四): 完结
- GCD介绍(四): 完结
- GCD介绍(四): 完结
- GCD介绍(四): 完结
- GCD介绍(四): 完结
- GCD介绍(四): 完结
- GCD介绍(四): 完结
- GCD介绍(四): 完结
- GCD介绍(四): 完结
- GCD介绍(四): 完结
- GCD介绍(四): 完结
- GCD介绍(四): 完结
- GCD介绍(四): 完结
- GCD介绍(四): 完结
- 关于实名认证的方案(附代码)
- 异步通信、Handler
- Android AsyncTask完全解析(源码角度)
- Linh Tran在2015 APT柬埔寨站主赛事夺冠
- C++异常以及错误处理
- GCD的介绍与使用(四)
- Bilateral Filtering(双边滤波) for SSAO
- 【Android】JNICALL could not be resolved
- android ProgressBar被拉伸或压缩变形,显示不全
- 其他程序员的博客(持续更新)
- 配置mybatis和ibatis控制台打印sql语句
- 计算机视觉领域的一些牛人博客+超有实力的研究机构等的网站链接
- 排序算法(c++编写)
- Largest Number