/GCDTimer

高效易用安全的 GCD 定时器

Primary LanguageObjective-CMIT LicenseMIT

GCDTimer

高效易用安全的 GCD 定时器。

dispatch_source_t 的 GCD 定时器进行 Objective-C 接口封装。实现以下功能:

定时器操作:

  • 创建定时器,指定执行队列;
  • 配置定时器执行间隔;
  • 配置定时器执行精度;
  • 是否开启子引用;
  • 立即启动定时器;
  • 取消定时器;
  • 创建倒计时定时器;
  • 创建重复定时器;

便利方法:

  • 创建自引用倒计时定时器;
  • 创建自引用重复定时器;

状态获取:

  • 定时器任务是否运行;
  • 定时器是否可用;
  • 定时器累计时间;

状态回调:

  • 取消状态回调;

示例代码

自引用倒计时

// 倒计时 5s,间隔 1s
[GCDTimer countdownWithTime:5 interval:1 countdownHandler:^(GCDTimer *timer) {
    NSLog(@"timer countdown: %@", @(timer.currentTime));
}];

使用上述 +countdownWithTime:interval:countdownHandler: 方法或开启 enableSelfRetain 自引用属性时,GCDTimer 对象会在内部自引用,直到倒计时小于等于 0 时,自动销毁。


重复任务定时器

// 每隔 1s 重复执行
GCDTimer *repeatTimer = [GCDTimer repeatWithInterval:1 actionHandler:^(GCDTimer *timer) {
    NSLog(@"timer time: %@", @(timer.currentTime));
}];
_repeatTimer = repeatTimer;
...
// 在特定时机或在页面 `-dealloc` 方法内执行 `-cancel` 方法
[_repeatTimer cancel];

同上,使用上述 +repeatWithInterval:actionHandler: 方法或开启 enableSelfRetain 自引用属性时,GCDTimer 对象会在内部自引用。要销毁或停止定时器则需要主动调用 -cancel 方法。


注意:

若不使用自引用功能时,需要对创建的 GCDTimer 进行强引用(作为强引用属性什么的),否则会在作用域超出时被系统自动销毁。

P.S. 若有更多定时器的应用场景欢迎 issue 我,说不定我能加个接口~