iOS中的函数与队列

2020-11-05  本文已影响0人  Bel李玉

本篇文章中我们主要讲解GCD中的函数。

GCD

GCDGrand Central Dispatch的简称,纯c语言,提供了非常多强大的函数,将任务添加到队列,并且指定执行任务的函数

函数

函数与队列

同步函数串行队列
同步函数并发队列
异步函数串行队列
异步函数并发对列

dispatch_sync

dispatch_sync函数,如果 dispatch_sync()目标queue当前queue,且 当前queue为串行队列时,会发生死锁(并行queue并不会)。
下面我们通过下面的几个函数示例来验证一下:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self mainSyncTest];
}
- (void)mainSyncTest{
    NSLog(@"0");
    dispatch_sync(dispatch_get_main_queue(), ^{
        NSLog(@"1");
    });
    NSLog(@"2");
}
- (void)test1{
    dispatch_queue_t queue = dispatch_queue_create("LY", NULL);
    NSLog(@"1");
    // 异步函数
    dispatch_async(queue, ^{
        NSLog(@"2");
        // 同步
        dispatch_sync(queue, ^{
            NSLog(@"3");
        });
         NSLog(@"4");
    });
    NSLog(@"5");
}

- (void)test2 {
    dispatch_queue_t queue1 = dispatch_queue_create("LY", NULL); // 串行队列
    dispatch_queue_t queue2 = dispatch_queue_create("Nice", NULL); // 串行队列
       NSLog(@"1");
       // 异步函数
       dispatch_async(queue1, ^{
           NSLog(@"2");
           // 同步
           dispatch_sync(queue2, ^{
               NSLog(@"3");
           });
            NSLog(@"4");
       });
       NSLog(@"5");
}
-(void) test3 {
    dispatch_queue_t queue = dispatch_queue_create("LY", DISPATCH_QUEUE_CONCURRENT);
    NSLog(@"1");
    dispatch_async(queue, ^{
        NSLog(@"2");
        dispatch_sync(queue, ^{
            NSLog(@"3");
        });
        NSLog(@"4");
    });
    NSLog(@"5");
}

最后,奉上本文的代码示例 GCD

上一篇下一篇

猜你喜欢

热点阅读