NSTimer的使用

一、NSTimer創建方式

     1.通過[NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(showAction) userInfo:nil repeats:YES];來創建   

        打印出來的日誌如下

2016-09-03 08:16:32.512 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:16:35.512 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:16:38.513 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:16:41.513 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:16:44.513 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:16:47.513 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:16:50.513 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:16:53.514excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:16:56.514 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:16:59.513 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:17:02.513 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:17:05.513 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:17:08.514 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:17:11.514 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:17:14.514 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:17:17.513 excersize[535:10412] ++++++++++++++++++++
2016-09-03 08:17:20.514 excersize[535:10412] ++++++++++++++++++++
    從打印的日誌中可以看出該方法是不能實現精確定時的。  ];

2.通過//1.創建NSTimer

    NSTimer * timer = [NSTimer timerWithTimeInterval:5.0 target:self selector:@selector(showAction) userInfo:nil repeats:YES];
    //2.把定時器添加到當前的RunLoop中,並選擇NSRunLoopCommonModes 運行模式
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

來創建。【注】在該種創建方式下必須將timer添加到相應的RunLoop模式下,否則timer不起作用。


二、精確定時GCD定時器

@interface ViewController ()
/****定時器(這裏不用帶*,因爲dispatch_source_t就是個類,內部已經包含了*)*****/
@property(nonatomic,strong) dispatch_source_t timer;
@end

-(void)gcdTimer
{
    
    //0.創建隊列
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    //1.創建一個GCD定時器
    
    dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    self.timer = timer;
    //2.設置定時器開始時間、間隔時間、精準度
    /**  第一個參數:要給哪個定時器設置
     第二個參數:開始時間
     第三個參數:間隔時間
     第四個參數:精準度(誤差) 一般爲0
     GCD的單位是納秒
     *
     */
    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 4 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
    //3.設置定時器要調用的方法
    dispatch_source_set_event_handler(timer, ^{
        NSLog(@"-------------------------");
            });
    //4.恢復啓動定時器
    dispatch_resume(timer);
}


發佈了29 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章