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<UITouch *> *)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] 任务-->(<NSThread: 0x7ff649508440>{number = 2, name = (null)})
这样就简单的开启了一条线程并处理了task任务,如果同步处理任务,不会开启新线程
这样写起来只是为了便于理解, 将任务和队列分别抽取出来, 任务的本质就是一个block,可以直接缩写成:
// 异步处理任务
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"任务-->(%@)",[NSThread currentThread]);
});