美文网首页就是ios用的iOS Coding程序员
GCD的一般使用(单例/多线程/1)

GCD的一般使用(单例/多线程/1)

作者: 渴wang | 来源:发表于2015-10-30 23:27 被阅读225次

    今天学习了一下dispatch

    下面写下GCD线程的基本使用(单例会在后面穿插)

    /**
     *  GCD 中央派发机制 Grand Central Dispatch
     *
     *  基于函数, 使用分发队列
     */
    // 1.主线程队列, 等同[NSOperationQueue mainQueue]
    // 2.全局线程队列, 后台队列, 并行
    // 3.自定义线程队列, DISPATCH_QUEUE_SERIAL 串行
          //           DISPATCH_QUEUE_CONCURRENT 并行
    
      
        // 我们写一个打印函数,以便在控制台看到线程的运行顺序
           - (void)printNumber:(NSString *)name {
                  for (int i = 0 ; i < 100; i++) {
                  NSLog(@"%d, 当前线程:%@", i, [NSThread currentThread]);
                  NSLog(@"%@", name);
                }
        }
    
    
    
    
    // 创建自定义队列
        dispatch_queue_t myQueue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_PRIORITY_DEFAULT);
    
    // 队列优先级, 串行/ 并行
    //    dispath_async (队列, 执行block);       异步    
    //    dispath_sync (队列, 执行block);      同步
    // 串行队列
    dispatch_async(myQueue, ^{
        [self printNumber:@"GCD"];
        [self printNumber:@"G1"];
    });
    
    // 添加操作
    dispatch_async(myQueue, ^{
        [self printNumber:@"G2"];
    });
    
    
    控制台的运行结果是:先运行GCD,运行完之后再运行G1,G1运行完后再运行G2
    
    
    
    // 并行队列
    dispatch_queue_t conQueue = dispatch_queue_create("conQueue", DISPATCH_QUEUE_CONCURRENT);//f
    dispatch_async(conQueue, ^{
        [self printNumber:@"G1"];
        [self printNumber:@"G2"];
    });
    dispatch_async(conQueue, ^{
        [self printNumber:@"G3"];
    });
    dispatch_async(conQueue, ^{
        [self printNumber:@"G4"];
    });
    
    控制台运行结果:先并行异步运行G1 G3 G4 , 完成之后运行G2.
    

    相关文章

      网友评论

      • 渴wang:请关注专题开源World
      • _轻舟:请问一下,你的程序是怎么放到程序框中的?
        渴wang:@_轻舟已过万重山
      • for_in:变的黄金时间森森大喊大叫的姐姐家的经典

      本文标题:GCD的一般使用(单例/多线程/1)

      本文链接:https://www.haomeiwen.com/subject/meifhttx.html