iOS-GCD多線程編程詳解7
這篇文章的主要講解的是關於dispatch_time_t的dispatch_time()及其在app中的運用。
一.dispatch_time
要想創建一個dispatch_time_t變量,就可以通過dispatch_time()函數和dispatch_walltime() 兩個函數創建。
1.dispatch_time_t dispatch_time(dispatch_time_t when, int64_t delta);//返回值爲dispatch_time_t的一個時間變量,傳人的參數爲when爲參考時間,delta爲時間差,就是返回時間與when的時間差。
2.dispatch_time_t dispatch_walltime(const struct timespec *when, int64_t delta);//該函數也是返回一個dispatch_time_t的變量,傳人的參數when也是相對時間,delta是時間差。
二.dispatch_time的使用
1.做一個循環調用的定時器
timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0, 0));
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC, 3 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{
NSLog(@"你好我是一個定時觸發的時間源事件");
});
dispatch_resume(timer);
運行結果:
2015-01-11 10:21:11.007 GCDTest[665:23799] 你好我是一個定時觸發的時間源事件
2015-01-11 10:21:17.494 GCDTest[665:23800] 你好我是一個定時觸發的時間源事件
2015-01-11 10:21:23.419 GCDTest[665:23800] 你好我是一個定時觸發的時間源事件
2015-01-11 10:21:28.473 GCDTest[665:23800] 你好我是一個定時觸發的時間源事件
2015-01-11 10:21:33.011 GCDTest[665:23800] 你好我是一個定時觸發的時間源事件
2015-01-11 10:21:36.008 GCDTest[665:23800] 你好我是一個定時觸發的時間源事件
2015-01-11 10:21:41.007 GCDTest[665:23800] 你好我是一個定時觸發的時間源事件
2015-01-11 10:21:46.008 GCDTest[665:23800] 你好我是一個定時觸發的時間源事件
2015-01-11 10:21:51.009 GCDTest[665:23800] 你好我是一個定時觸發的時間源事件
2015-01-11 10:21:56.008 GCDTest[665:23800] 你好我是一個定時觸發的時間源事件
運行結果:輸出都在5的範圍內。
2.使用dispatch_time_t的延遲調用
NSLog(@"第一次輸出:%@",[NSDate date]);
dispatch_queue_t que = dispatch_queue_create("", DISPATCH_QUEUE_SERIAL);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 4*10000000000),
que,
^{
NSLog(@"第二次輸出:%@",[NSDate date]);
});
運行結果:設置的事延遲40秒,輸出結果也爲40左右
2015-01-11 10:34:15.009 GCDTest[848:29127] 第一次輸出:2015-01-11 02:34:15 +0000
2015-01-11 10:34:55.011 GCDTest[848:29248] 第二次輸出:2015-01-11 02:34:55 +0000
GCD系列總結:在app中的實際應用開發中GCD的使用也具體是這些,GCD編程最重要的幾個要素是執行任務的Block設計,想要被執行的任務是同步還是異步,通過信號量來控制線程的執行,通過組任務和阻塞任務塊來實現依賴順序調用,延遲調用等。對於線程的管理就交給系統和框架吧。