GCD常用方法,gcd
1.延遲操作
2.一次性代碼
3.隊列組
/** * 順延強制 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // 2秒後非同步執行這裡的代碼... }); 順延強制:不需要再寫方法,且它還傳遞了一個隊列,我們可以指定並安排其線程。 如果隊列是主隊列,那麼就在主線程執行,如果隊列是並發隊列,那麼會新開啟一個線程,在子線程中執行。 */-(void)test1 { NSLog(@"列印當前線程---%@", [NSThread currentThread]); //順延強制,第二種方式 //可以安排其線程(1),主隊列 dispatch_queue_t queue= dispatch_get_main_queue(); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), queue, ^{ NSLog(@"主隊列--順延強制------%@",[NSThread currentThread]); }); //可以安排其線程(2),並發隊列 //1.擷取全域並發隊列 dispatch_queue_t queue1= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //2.計算任務執行的時間 dispatch_time_t when=dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)); //3.會在when這個時間點,執行queue中的這個任務 dispatch_after(when, queue1, ^{ NSLog(@"並發隊列-順延強制------%@",[NSThread currentThread]); });}
/** * 2.使用dispatch_once一次性代碼 使用dispatch_once函數能保證某段代碼在程式運行過程中只被執行1次 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ // 只執行1次的代碼(這裡面預設是安全執行緒的) }); 整個程式運行過程中,只會執行一次。 */- (void)test2 { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@"該行代碼只執行一次"); });}
/** * 隊列組 */- (void)test3 { dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 執行1個耗時的非同步作業 }); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 執行1個耗時的非同步作業 }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ // 等前面的非同步作業都執行完畢後,回到主線程...(結果處理) });}