iOS GCD四大队列

2017-04-11  本文已影响1715人  张三儿

GCD的队列

- (void)serialSync{
    //1.任务
    void  (^task1)  () = ^(){
        NSLog(@"task1---%@",[NSThread currentThread]);
    };
    
    void (^task2)() = ^() {
        NSLog(@"task2---%@",[NSThread currentThread]);
    };
    
    void (^task3)() = ^() {
        NSLog(@"task3---%@",[NSThread currentThread]);
    };
    
    //2.队列
    /**
        参数1:队列的名称,方便调试,一般是公司域名倒写
        www.fichfit.cn
        cn.fichfit
        参数2:队列的类型,如果创建是串行队列,还可以写NULL
     */
    dispatch_queue_t serailQueue = dispatch_queue_create("cn.itcast.serialA", DISPATCH_QUEUE_SERIAL);
    
    
    //3.将任务加入到队列中,同步的执行
    dispatch_sync(serailQueue, task1);
    dispatch_sync(serailQueue, task2);
    dispatch_sync(serailQueue, task3);
}

打印结果


- (void)serialAsync{
    //1.任务
    void  (^task1)  () = ^(){
        NSLog(@"task1---%@",[NSThread currentThread]);
    };
    
    void (^task2)() = ^() {
        NSLog(@"task2---%@",[NSThread currentThread]);
    };
    
    void (^task3)() = ^() {
        NSLog(@"task3---%@",[NSThread currentThread]);
    };
    
    //2.队列
    /**
     参数1:队列的名称,方便调试,一般是公司域名倒写
     

     参数2:队列的类型,如果创建是串行队列,还可以写NULL
     */
    dispatch_queue_t serailQueue = dispatch_queue_create("cn.itcast.serialA", DISPATCH_QUEUE_SERIAL);
    
    
    //3.将任务加入到队列中,异步的执行
    dispatch_async(serailQueue, task1);
    dispatch_async(serailQueue, task2);
    dispatch_async(serailQueue, task3);
}

打印结果:

Snip20170411_2.png
- (void)concurrentSync{
    //1.任务
    void(^task1)() = ^() {
        NSLog(@"task1---%@",[NSThread currentThread]);
    };
    
    void(^task2)() = ^() {
        NSLog(@"task2---%@",[NSThread currentThread]);
    };
    
    void(^task3)() = ^() {
        NSLog(@"task3---%@",[NSThread currentThread]);
    };
    
    //2.队列,并发队列,必须自己写,不能写NULL
    dispatch_queue_t concurrentQueue =  dispatch_queue_create("cn.fichfit.concurrentQueueA", DISPATCH_QUEUE_CONCURRENT);
    
    //3.要把任务和队列绑定起来,同步的去执行
    dispatch_sync(concurrentQueue, task1);
    dispatch_sync(concurrentQueue, task2);
    dispatch_sync(concurrentQueue, task3);
}

打印结果:

Snip20170411_3.png
- (void)concurrentAsync{
    //1.任务
    void(^task1)() = ^() {
        NSLog(@"task1---%@",[NSThread currentThread]);
    };
    
    void(^task2)() = ^() {
        NSLog(@"task2---%@",[NSThread currentThread]);
    };
    
    void(^task3)() = ^() {
        NSLog(@"task3---%@",[NSThread currentThread]);
    };
    
    //2.队列,并发队列,必须自己写,不能写NULL
    dispatch_queue_t concurrentQueue =  dispatch_queue_create("cn.fichfit.concurrentQueueA", DISPATCH_QUEUE_CONCURRENT);
    
    //3.要把任务和队列绑定起来,异步的去执行
    dispatch_async(concurrentQueue, task1);
    dispatch_async(concurrentQueue, task2);
    dispatch_async(concurrentQueue, task3);
}

打印结果:

Snip20170411_4.png
- (void)gcdDemo3

{

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

//全局队列+同步任务

for (int i = 0; i < 10; ++i){

//同步任务

dispatch_sync(queue, ^{

NSLog(@"%@ %d",[NSThread currentThread],i);

});

}

}

打印结果


Snip20170411_5.png
- (void)gcdDemo3

{

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

//全局队列+异步任务

for(int i = 0; i < 10; ++i){

dispatch_async(queue, ^{

NSLog(@"%@ %d",[NSThread currentThread],i);

});

}

}

打印结果



- (void)mainSync{
    NSLog(@"%s",__func__);
    
    //1.任务
    void(^task1)() = ^() {
        NSLog(@"%@----task1",[NSThread currentThread]);
    };
    
    void(^task2)() = ^() {
        NSLog(@"%@----task2",[NSThread currentThread]);
    };
    
    void(^task3)() = ^() {
        NSLog(@"%@----task3",[NSThread currentThread]);
    };
    
    //2.队列,获取系统提供的主队列
    dispatch_queue_t mainQueue = dispatch_get_main_queue();
    
    //3.将任务添加到队列,将这二者绑定,同步的执行
    dispatch_sync(mainQueue, task1);
    dispatch_sync(mainQueue, task2);
    dispatch_sync(mainQueue, task3);
    
}

- (void)mainAsync{
    NSLog(@"mainAsync %s",__func__);
    
    //1.任务
    void(^task1)() = ^() {
        NSLog(@"%@----task1",[NSThread currentThread]);
    };
    
    void(^task2)() = ^() {
        NSLog(@"%@----task2",[NSThread currentThread]);
    };
    
    void(^task3)() = ^() {
        NSLog(@"%@----task3",[NSThread currentThread]);
    };
    
    //2.队列,获取系统提供的主队列
    dispatch_queue_t mainQueue = dispatch_get_main_queue();
    
    //3.将任务添加到队列,将这二者绑定,异步的执行
    dispatch_async(mainQueue, task1);
    dispatch_async(mainQueue, task2);
    dispatch_async(mainQueue, task3);

}

<h2>总结:任务的优先级比队列优先级高,所以我们在队列和任务的各种组合的时候,首先要看我们的任务.</h2>

上一篇 下一篇

猜你喜欢

热点阅读