您的位置:首页 > 移动开发 > IOS开发

iOS 线程之GCD的高级用法

2014-11-11 17:58 204 查看
之前的一篇关于线程的blog已经为大家介绍了GCD的简单使用方式及例子说明,今天由于项目中有特殊的应用GCD的实例,为大家介绍两种特殊需求的使用GCD的方法。

目的:实现一件事情做完,再做下一件事情,确保函数的执行周期。 

解决方案:提供以下2种解决方案

1、创建barrier等待线程

  
dispatch_async(dispatch_get_main_queue(), ^{
    
[self ActionFirst];
   
});

            
dispatch_barrier_async(dispatch_get_main_queue(), ^{
   
[self ActionNext];
   
});

 

2、创建group线程组(即 队列queue)

         dispatch_group_t group = dispatch_group_create();

            

         dispatch_group_async(group, dispatch_get_main_queue(), ^{

            [self ActionFirst];

         });
            
         dispatch_group_notify(group, dispatch_get_main_queue(), ^{

             [self ActionNext];

         });

出现问题的代码如下:

-(void)example

{
[self ActionFirst];

 
[self ActionNext];
}

产生原因:调用example函数时,由于ActionFirst函数执行的时间比较长,当ActionNext函数执行完时,ActionFirst可能还没有执行完,导致执行ActionNext时出现崩溃的现象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程 GCD 异步 同步 并发