GCD的介绍与使用(四)

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执行完后执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值