码迷,mamicode.com
首页 > 其他好文 > 详细

GCD的常见用法

时间:2016-11-27 06:49:26      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:delay   cto   过程   操作   efault   卡顿   group   strong   after   

一.队列组

1.分别异步执行2个耗时的操作, 等2个异步操作都执行完毕后,再回到主线程执行另一个操作, 用队列组比较好

 1 dispatch_group_t group =  dispatch_group_create();
 2 
 3 dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
 4 
 5     // 耗时的异步操作一
 6 
 7 });
 8 
 9 dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
10 
11     // 耗时的异步操作二
12 
13 });
14 
15 dispatch_group_notify(group, dispatch_get_main_queue(), ^{
16 
17     // 操作一二都完毕后,回到主线程
18 
19 });

二、延迟执行

1.第一种

1 // 3秒后再调用self的test方法
2 
3 [self performSelector:@selector(test) withObject:nil afterDelay:3.0];

该方法通常是在主线程中调用,会阻碍进程, 产生卡顿。

2. 第二种---GCD

1 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), my_queue, ^{
2 
3     // 3秒后异步执行这里的代码...
4 
5 });

其中my_queue可以是主队列也可以是全局并发队列, 自己可以选

1  //获取主队列
2 
3  dispatch_queue_t my_queue= dispatch_get_main_queue();
1  //获取全局并发队列
2 
3  dispatch_queue_t my_queue= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

三.使用dispatch_once一次性代码

使用dispatch_once函数能保证某段代码在程序运行过程中只被执行1次

1 static dispatch_once_t onceToken;
2 
3 dispatch_once(&onceToken, ^{
4 
5     // 只执行1次的代码
6 });

 

     

GCD的常见用法

标签:delay   cto   过程   操作   efault   卡顿   group   strong   after   

原文地址:http://www.cnblogs.com/loveDodream-zzt/p/6105734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!