zoukankan      html  css  js  c++  java
  • 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时出现崩溃的现象。

  • 相关阅读:
    常用模板
    pascal 的字符串操作
    war2 洛谷模拟赛day2 t3 状压
    状压搜索 洛谷T47092 作业
    Milking Order
    洛谷九月月赛T1 思考
    C数列下标 牛客OI赛制测试赛2
    钓鱼 洛谷p1717
    机房人民大团结(DP)
    Spark的Straggler深入学习(2):思考Block和Partition的划分问题——以论文为参考
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5389928.html
Copyright © 2011-2022 走看看