iOS-GCD多線程編程詳解7編程
這篇文章的主要講解的是關於dispatch_time_t的dispatch_time()及其在app中的運用。多線程
一.dispatch_timeapp
要想建立一個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的使用spa
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] 你好我是一個定時觸發的時間源事件code
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] 你好我是一個定時觸發的時間源事件
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]); });
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設計,想要被執行的任務是同步仍是異步,經過信號量來控制線程的執行,經過組任務和阻塞任務塊來實現依賴順序調用,延遲調用等。對於線程的管理就交給系統和框架吧。