GCD简单用法

/*!
 *  @brief GCD方法
 */
- (void)GCDMethod
{
    //后台执行
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        
    });
    
    //主线程执行
    dispatch_async(dispatch_get_main_queue(), ^{
        
    });
    
    //一次性执行
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
    });
    
    //延迟几秒
    double delayInSeconds = 2.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^{
        //[self CommonMethod1];
    });
    
    //高级用法让后台 2 个线程并行执行,然后等 2 个线程都结束后,再汇总执行结果。这个可以用 dispatch_group, dispatch_group_async 和 dispatch_group_notify 来实现,
    dispatch_group_t group = dispatch_group_create();
    dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
        [self CommonMethod1];
    });
    
    dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
        [self CommonMethod2];
    });
    dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
        [self CommonMethod1];
    });
    
}
/*!
 *  @brief 案例测试
 */
- (void)GCDEmgTest{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSURL *url = [NSURL URLWithString:@"http://www.youdao.com"];
        NSError *error;
        NSString *data = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
        if (data != nil) {
            dispatch_async(dispatch_get_main_queue(), ^{
                [self CommonMethod1];
                //NSLog(@"%@",data);
            });
        }
    });
}
- (void)CommonMethod1
{
    static NSInteger i = 1;
    NSLog(@"CommonMethod1第%ld葫芦娃",++i);
}


- (void)CommonMethod2
{
    static NSInteger i = 2;
    NSLog(@"CommonMethod2第%ld葫芦娃",++i);
}
原文地址:https://www.cnblogs.com/superbobo/p/5302123.html