iOS 线程之GCD的高级使用方法

之前的一篇关于线程的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时出现崩溃的现象。

原文地址:https://www.cnblogs.com/zfyouxi/p/5389928.html