dispatch_source_t _timer; // 必须创建成全局变量,否则执行一次就会被release掉。
__block int n = 0;
_timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
/**
* dispatch_source_set_timer(dispatch_source_t source,
* dispatch_time_t start,
* uint64_t interval,
* uint64_t leeway);
*
* params:
* start: 定时器开始时间,可以通过dispatch_time和dispatch_walltime函数来创建,也可以使用常量DISPATCH_TIME_NOW和DISPATCH_TIME_FOREVER
* interval: 间隔时间,1.0 * NSEC_PER_SEC 一秒
* leeway: 计时器触发的精准程度
*/
dispatch_source_set_timer(_timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0);
// 计时器的触发block
dispatch_source_set_event_handler(_timer, ^{
++n;
NSLog(@"%i", n);
if (10 == n) {
dispatch_source_cancel(_timer);
}
});
// 计时器cancel的时候触发的block
dispatch_source_set_cancel_handler(_timer, ^{
NSLog(@"cancel");
});
// 因为dispatch_source启动时默认是挂起状态的,需要手动启动。
dispatch_resume(_timer);