提到定時器衩椒,NStimer肯定是我們最為熟悉的。
但是NStimer有著很大的缺點钞翔,并不準(zhǔn)確严卖。
通俗點說,就是它該做他的事了布轿,但是由于其他事件的影響哮笆,Nstimer會放棄他應(yīng)該做的。
而GCD定時器汰扭,是不會發(fā)生這種事情的稠肘。
GCD嚴(yán)格按照規(guī)定好的規(guī)格去做事。
前面介紹RunLoop 的時候已經(jīng)介紹了NSTimer萝毛。
這里就不在介紹了项阴。
在這里著重介紹一下GCD定時器。
首先笆包,我們知道NStimer是在RunLoop的基礎(chǔ)上執(zhí)行的环揽,然而RunLoop是在GCD基礎(chǔ)上實現(xiàn)的,所以說GCD可算是更加高級庵佣。
//? ViewController.m
//#import "ViewController.h"
NSInteger count = 0;
@interface ViewController ()
//注意**這里不需要??號 可以理解為dispatch_time_t 已經(jīng)包含了
@property (nonatomic, strong)dispatch_source_t time;
@end
@implementation ViewController
- (void)viewDidLoad {? ??
[super viewDidLoad];
}
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event{
//獲得隊列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
//創(chuàng)建一個定時器
self.time = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
//設(shè)置開始時間
dispatch_time_t start = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC));
//設(shè)置時間間隔
uint64_t interval = (uint64_t)(2.0* NSEC_PER_SEC);
//設(shè)置定時器
dispatch_source_set_timer(self.time, start, interval, 0);
//設(shè)置回調(diào)
dispatch_source_set_event_handler(self.time, ^{
NSLog(@"旭寶愛吃魚");
//設(shè)置當(dāng)執(zhí)行五次是取消定時器
count++;
if(count == 5){
dispatch_cancel(self.time);
}
});
//由于定時器默認(rèn)是暫停的所以我們啟動一下
//啟動定時器
dispatch_resume(self.time);
}
@end