多线程-GCD初步演示

GCD中处理任务只有两种形式:

同步执行任务(Sync)异步执行任务(aSync)

示例代码:

#import "ViewController.h"
@interface ViewController ()
@end

@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    
    // 队列 (这里获取的是系统提供的全局队列,一个并发队列,后续会对队列单独讲解)
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    
    // 任务
    dispatch_block_t task = ^{
        NSLog(@"任务-->(%@)",[NSThread currentThread]);
    };
    
    /*
         执行任务:
            参数1: 队列
            参数2: 任务
     */
    // 异步处理
    dispatch_async(queue, task);
    
    // 同步处理: dispatch_sync(queue, task);
    
}
@end

Log结果:

2016-08-20 15:04:15.188 GCD-Demo[20117:2511500] 任务-->({number = 2, name = (null)})

这样就简单的开启了一条线程并处理了task任务,如果同步处理任务,不会开启新线程

这样写起来只是为了便于理解, 将任务和队列分别抽取出来, 任务的本质就是一个block,可以直接缩写成:

    // 异步处理任务
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        
        NSLog(@"任务-->(%@)",[NSThread currentThread]);
    });

你可能感兴趣的:(多线程-GCD初步演示)