iOS GCD(8)

来源:未知 责任编辑:责任编辑 发表时间:2014-01-26 21:59 点击:

    });


使用dispatch_barrier_async方法,它会等待在它之前添加到 Concurrent Dispatch Queue的所有处理执行结束后,才执行该处理,然后等待该处理结束后,才接着处理后续添

加到Concurrent Dispatch Queue中的处理任务。当然在dispatch_barrier_async方法之前和之后添加的处理任务可以并发执行,即不保证执行顺序,但是可以确保

dispatch_barrier_async方法添加的任务一定是只能同时执行一个,按其添加任务顺序执行的,就是说,执行完blk1_reading和blk2_reading的读取数据任务后,才是进行

blk1_writting的写入数据任务,然后才是执行接着的读取数据的任务。

 

 


7、dispatch——sync

 

 

dispatch_async方法中的async意味着“非同步”,就是将指定的block非同步的添加到dispatch qeueue中,dispatch_async方法不做任何等待。

dispatch_sync方法中的sync意味着“同步”,也就是将指定的block同步追加到dispatch queue中,在追加block的过程结束之前,dispatch_sync方法会一直等待。

一旦调用dispatch_sync,那么在指定的处理执行结束之前,该方法不会返回,dispatch_sync方法可以简化代码,也可以说是简易版的dispatch_group_wait方法

   

dispatch_sync方法使用简单,但是容易引起死锁

[cpp]
dispatch_queue_t queue = dispatch_get_main_queue(); 
    dispatch_sync(queue, ^{ 
        NSLog(@"引起死锁!"); 
    }); 

dispatch_queue_t queue = dispatch_get_main_queue();
    dispatch_sync(queue, ^{
        NSLog(@"引起死锁!");
    });


上面的代码在主线程中执行指定的block,并等待其执行结束,但是其实在主线程中就是在执行这些代码,所以就造成了死锁。

 


8、dispatch_apply


dispatch_apply 方法是 dispatch_sync 方法和Dispatch Group的关联API,该方法按指定的次数将指定的Block追加到指定的Dispatch Queue中,并等待全部处理执行结束

[cpp]
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
    dispatch_apply(10, queue, ^(size_t index){ 
        NSLog(@"%zu",index); 
    }); 
    NSLog(@"done"); 

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_apply(10, queue, ^(size_t index){
        NSLog(@"%zu",index);
    });
    NSLog(@"done");

因为是在Global Dispatch Queue中执行处理,所以各个处理的执行时间不定,也就是说输出1 2 3 ...的顺序不定。但是输出结果done必定是在最后的位置上的。因为dispatch_apply会等待所以的处理任务执行结束。

dispatch_apply 中的第一个参数是重复次数,第二个参数是追加对象的Dispatch Queue,第三个参数为追加的处理block,注意带参数

 


[cpp]
//假如对一个NSArray类对象的所有元素执行处理时,不必一个个编写for循环  

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Lexical or Preprocessor Issue 'xxx.h
  • ios学习笔记(二)xcode 4.3.2下实现基本交互
  • ios版本的helloworld
  • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
  • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
  • UITableView一些方法
  • IOS类似iphone通讯录TableView的完整demo【附源码】
  • [iPhone中级]iPhone团购信息客户端的开发 (二)
  • iphone(object-c)内存管理(1)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1