1 @interface ViewController () 2 3 4 5 /** 定時器對象 */ 6 7 @property(nonatomic,strong)dispatch_source_t timer; 8 9 @end 10 11 12 13 @implementation ViewController 14 15 16 17 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 18 19 { 20 21 /* 22 23 總結:GCD定時器:會自動開啟一條子線程,子線程中也會自己開啟了runloop.自己創建,自己管理,全不用我們手動管理 24 25 */ 26 27 28 29 //一.創建定時器對象 30 31 //這個方法只要敲:(dispatach_source...timer..) 32 33 //01參數:要創建的source 是什么類型的 34 35 //(DISPATCH_SOURCE_TYPE_TIMER)定時器 36 37 //04參數:隊列 ----線程 決定block 在哪個線程中調用 38 39 40 41 dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0, 0)); 42 43 44 45 //二.設置定時器 46 47 //01參數:定時器對象 48 49 //02參數:開始時間 (DISPATCH_TIME_NOW) 什么時候開始執行第一次任務 50 51 //03參數:間隔時間 GCD時間單位:納秒 52 53 //04參數:leewayInSeconds精准度:允許的誤差: 0 表示絕對精准 54 55 dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC); 56 57 58 59 //三.定時器每隔一段時間就要執行任務(block回調) 60 61 dispatch_source_set_event_handler(timer, ^{ 62 63 NSLog(@"GCD----%@",[NSThread currentThread]);//(當前線程是子線程) 64 65 }); 66 67 68 69 //四.恢復(默認是停止的) 70 71 dispatch_resume(timer); 72 73 74 75 self.timer = timer; //一定要用強指針引着 76 77 }