GCD定時器

 
 

GCD定時器的優點:不受RunLoop的運行模式的影響(由於它的底層也是C語言)面試

 
 

Xcode自帶的代碼塊保存的有,直接dispatch就出來;填入參數便可oop

 
 

可是記得relaeaseatom

它的的間隔時間是納秒爲單位,(面試)spa

注意:它本質是個結構體,若是沒有定義一個屬性用強指針應用它(strong),他會被銷燬,指針


   
   
   
   

NStimer定時器:會受到RunLoop的運行模式的影響code

每次RunLoop啓動時,只能指定其中一個 Mode,這個Mode被稱做 CurrentModeserver

 
 

若是須要切換Mode,只能退出Loop,再從新指定一個Mode進入對象

這樣作主要是爲了分隔開不一樣組的Source/Timer/Observer,讓其互不影響blog

 
 

一個 RunLoop 包含若干個 Mode,每一個Mode又包含若干個Source/Timer/Observer隊列

 
 

 


   
   
   
   

@interface
ViewController () @property (nonatomic ,strong)dispatch_source_t timer; // 注意:此處應該使用強引用 strong @end @implementation ViewController -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { //0.建立隊列 dispatch_queue_t queue = dispatch_get_main_queue(); //1.建立GCD中的定時器 /* 第一個參數:建立source的類型 DISPATCH_SOURCE_TYPE_TIMER:定時器 第二個參數:0 第三個參數:0 第四個參數:隊列 */ dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); //2.設置時間等 /* 第一個參數:定時器對象 第二個參數:DISPATCH_TIME_NOW 表示從如今開始計時 第三個參數:間隔時間 GCD裏面的時間 納秒 第四個參數:精準度(表示容許的偏差,0表示絕對精準) */
Xcode的代碼苦衷搜索Dispatch就有,不用敲
    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 0.001 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
    
    //3.要調用的任務
    dispatch_source_set_event_handler(timer, ^{
        NSLog(@"GCD-----%@",[NSThread currentThread]);
    });
    
    //4.開始執行
    dispatch_resume(timer);

    
    self.timer = timer;
}
@end