GCD中處理任務(wù)只有兩種形式:
同步執(zhí)行任務(wù)(Sync) 和 異步執(zhí)行任務(wù)(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 {
// 隊列 (這里獲取的是系統(tǒng)提供的全局隊列,一個并發(fā)隊列,后續(xù)會對隊列單獨講解)
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
// 任務(wù)
dispatch_block_t task = ^{
NSLog(@"任務(wù)-->(%@)",[NSThread currentThread]);
};
/*
執(zhí)行任務(wù):
參數(shù)1: 隊列
參數(shù)2: 任務(wù)
*/
// 異步處理
dispatch_async(queue, task);
// 同步處理: dispatch_sync(queue, task);
}
@end
Log結(jié)果:
2016-08-20 15:04:15.188 GCD-Demo[20117:2511500] 任務(wù)-->(<NSThread: 0x7ff649508440>{number = 2, name = (null)})
這樣就簡單的開啟了一條線程并處理了task任務(wù),如果同步處理任務(wù),不會開啟新線程
這樣寫起來只是為了便于理解, 將任務(wù)和隊列分別抽取出來, 任務(wù)的本質(zhì)就是一個block,可以直接縮寫成:
// 異步處理任務(wù)
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"任務(wù)-->(%@)",[NSThread currentThread]);
});