就是ios用的iOS Coding程序员

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

2015-10-30  本文已影响225人  渴wang

今天学习了一下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.
上一篇下一篇

猜你喜欢

热点阅读