GCD定時器


 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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM