GCD详情

  1 #import "ViewController.h"
  2 
  3 @interface ViewController ()
  4 
  5 @end
  6 
  7 @implementation ViewController
  8 
  9 - (void)viewDidLoad {
 10     [super viewDidLoad];
 11     // Do any additional setup after loading the view, typically from a nib.
 12     //1.多次执行相同的代码块
 13     [self testApply];
 14     //2.代码块只执行一次
 15     //[self testOnce];
 16     //[self testOnce];
 17     //[self testOnce];
 18     //[self testOnce];
 19     //3.代码块在一段时间后执行
 20     //[self testAfter];
 21     //4.将线程放到一个组里面
 22     //[self testGroup];
 23     //5.在两个线程序列之间执行一段代码
 24     //[self testBarrier];
 25 }
 26 
 27 //在两个线程序列之间执行一段代码
 28 -(void)testBarrier
 29 {
 30     //队列不能是系统的全局并行队列
 31     //使用自己创建的并行队列
 32     dispatch_queue_t conQueue = dispatch_queue_create("conQueue", DISPATCH_QUEUE_CONCURRENT);
 33     //线程一
 34     dispatch_async(conQueue, ^{
 35         for (int i=0; i<100; i++) {
 36             NSLog(@"线程一:%d",i);
 37         }
 38     });
 39     
 40     //线程二
 41     dispatch_async(conQueue, ^{
 42         for (int i=0; i<100; i++) {
 43             NSLog(@"线程二:%d",i);
 44         }
 45     });
 46     
 47     //在线程一,线程二执行完成之后,在线程三执行之前执行一段代码
 48     dispatch_barrier_async(conQueue, ^{
 49         NSLog(@"barrier");
 50     });
 51     
 52     //线程三
 53     dispatch_async(conQueue, ^{
 54         for (int i=0; i<100; i++) {
 55             NSLog(@"线程三:%d",i);
 56         }
 57     });
 58 }
 59 
 60 //将线程放到一个组里面
 61 -(void)testGroup
 62 {
 63     dispatch_group_t group = dispatch_group_create();
 64     //获取全局队列
 65     dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
 66     //参数一:线程所在的组
 67     //参数二:线程所在的队列
 68     //参数三:线程的执行体
 69     //线程一
 70     dispatch_group_async(group, globalQueue, ^{
 71         for (int i=0; i<100; i++) {
 72             NSLog(@"线程一:%d",i);
 73         }
 74     });
 75     //线程二
 76     dispatch_group_async(group, globalQueue, ^{
 77         for (int i=0; i<100; i++) {
 78             NSLog(@"线程二:%d",i);
 79         }
 80     });
 81     
 82     
 83     dispatch_group_notify(group, globalQueue, ^{
 84         //在线程组里的所有线程执行完成后调用的代码
 85         NSLog(@"线程组执行完成");
 86     });
 87 }
 88 
 89 //代码块在一段时间后执行
 90 -(void)testAfter
 91 {
 92     NSLog(@"执行之前");
 93     //时间
 94     //当前时间十秒之后
 95     dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC*10);
 96     //参数一:时间
 97     //参数二:线程所在的队列
 98     //参数三:线程的执行体
 99     dispatch_after(time, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
100         NSLog(@"执行了after");
101     });
102 }
103 
104 //代码块只执行一次
105 -(void)testOnce
106 {
107     static dispatch_once_t onceToken;
108     
109     dispatch_once(&onceToken,^{
110         NSLog(@"执行一次");
111     });
112 }
113 
114 //多次执行相同的代码块
115 -(void)testApply
116 {
117     //参数一:代码块执行的次数
118     //参数二:代码块所在的队列
119     //参数三:代码块的内容
120     size_t t = 10;
121     //队列
122     dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
123     dispatch_apply(t, globalQueue, ^(size_t time) {
124         NSLog(@"第%ld次",time);
125     });
126 }
127 
128 - (void)didReceiveMemoryWarning {
129     [super didReceiveMemoryWarning];
130     // Dispose of any resources that can be recreated.
131 }
132 
133 @end

 

转载于:https://www.cnblogs.com/liaods/p/4788931.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值