iOS学习笔记5GCD smallelephant_A

---恢复内容开始---

直接上代码

一,异步函数往并发队列中添加任务

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_async(queue, ^{

        NSLog(@"下载图片。。。%@",[NSThread currentThread]);

    });

    dispatch_async(queue, ^{

        NSLog(@"下载图片2.。。%@",[NSThread currentThread]);

    });

    dispatch_async(queue, ^{

        NSLog(@"下载图片3.。。%@",[NSThread currentThread]);

    });

    

    

    NSLog(@"主线程。。。%@",[NSThread mainThread]);

二,异步函数往串行队列中添加任务

 NSLog(@"%@",[NSThread mainThread]);

    

    dispatch_queue_t queue = dispatch_queue_create("dusunan", NULL);

    dispatch_async(queue, ^{

        NSLog(@"下载图片1----%@",[NSThread currentThread]);

    });

    dispatch_async(queue, ^{

        NSLog(@"下载图片2----%@",[NSThread currentThread]);

    });

    

    dispatch_async(queue, ^{

        NSLog(@"下载图片3----%@",[NSThread currentThread]);

    });

 此种方法会开启线程,但是只会开启一个线程

三,用异步函数往并发队列中添加任务

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    

    

    

    dispatch_sync(queue, ^{

        NSLog(@"下载图片1 %@",[NSThread currentThread]);

    });

    dispatch_sync(queue, ^{

        NSLog(@"下载图片2 %@",[NSThread currentThread]);

    });

    dispatch_sync(queue, ^{

        NSLog(@"下载图片3 %@",[NSThread currentThread]);

    });

 四,同步函数往串行队列中添加任务

 dispatch_queue_t queue = dispatch_queue_create("dusunan", NULL);

    

    dispatch_sync(queue, ^{

        NSLog(@"下载图片1 %@",[NSThread currentThread]);

    });

    dispatch_sync(queue, ^{

        NSLog(@"下载图片2 %@",[NSThread currentThread]);

    });

    dispatch_sync(queue, ^{

        NSLog(@"下载图片3 %@",[NSThread currentThread]);

    });

    

 五,应用

(1)一次性代码 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
18 {
19     if (_log==NO) {
20         NSLog(@"该行代码只执行一次");
21         _log=YES;
22     }
23 }



-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
26 {
27     static dispatch_once_t onceToken;
28     dispatch_once(&onceToken, ^{
29         NSLog(@"该行代码只执行一次");
30     });
31 }


下面的代码可以取代上面的代码块
原文地址:https://www.cnblogs.com/adodo/p/5193421.html