常用GCD梳理(-)

一:异步、同步

1.dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

异步执行

例如: 会立即返回,同时把block里面加载的东西放在后台执行。  执行完毕之后 在main(主线程)里面刷新UI页面。

//    dispatch_queue_t global = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//    dispatch_queue_t mainQ = dispatch_get_main_queue();
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
                NSURL *url = [NSURL URLWithString:@"http://www.ytxww.com/upload/image/201203/20120309100442708165.jpg"];
                _img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
                _img = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
          在main(主线程)里面刷新UI页面
dispatch_async(dispatch_get_main_queue(), ^{
            _imgv.image = _img;
        });
    });

同样:

2.dispatch_sync(dispatch_queue_t queue>,(void)block)为同步执行,和异步不同的是要执行完block块之后才返回,然后进行下面的操作。


二。dispatch_apply

按照一定次数(size_t iterations)循环,队列本身决定同步或者异步执行

dispatch_apply(size_t iterations,dispatch_queue_t queue,void (^block)(size_t));

因为是全部执行完之后才返回,然后继续执行下面的操作,所以,如果在dispatch_async(异步)里面添加dispatch_apply可以出现dispatch_sync(同步)的效果。如下:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
        dispatch_apply(5, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t index) {
            NSLog(@"%zu",index);
        });
        NSLog(@"会执行五次apply之后,才执行此次打印");
    });

三。dispatch_after

延迟执行,    延迟5秒执行打印

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{

        NSLog(@"after do");

    });


四。 

1.dispatch_barrier_async

dispatch_barrier_async(dispatch_queue_t queue,dispatch_block_t block);

作用如其名-->阻碍。

如下:不管barrier block里面需要多久,3,4都会在barrier执行完之后执行。

  dispatch_queue_t queue = dispatch_queue_create("myqueue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^(){
        NSLog(@"1");
    });
    dispatch_async(queue, ^(){
        NSLog(@"2");
    });
    dispatch_barrier_async(queue, ^(){
        NSLog(@"barrier");
        dispatch_apply(10, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t index) {
            NSLog(@"......");
        });
    });
    dispatch_async(queue, ^(){
        NSLog(@"3");
    });
    dispatch_async(queue, ^(){
        NSLog(@"dispatch-4");
    });


2. dispatch_barrier_sync

dispatch_barrier_async,大同小异,只是用在同步或者异步的区别。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值