iOS GCD定时器

定时器需求

先说需求我们需要一个定时器,包含开启,暂停,恢复,关闭。线程安全
并且不需要管理他的内存,无论在什么状态只要持有他的self释放了,这个定时器也要跟着释放。

约定

当定时器 开启后 只可以 暂停 和 关闭
当定时器 关闭后 只可以 重新开启
当定时器 暂停后 只可以 恢复
当定时器 恢复后 只可以 暂停 和 关闭

注意事项

1. dispatch_source_set_event_handler 回调是一个block,所以很容易会出现循环引用问题。

使用的时候记得加__weak

2.关于dispatch_suspend与dispatch_resume

dispatch_suspend 是将定时器暂停,dispatch_resume是恢复定时器。

官方注释
Calls to dispatch_suspend() must be balanced with calls
to dispatch_resume().

你调用了suspend(暂停)几次,你想resume(恢复)的话,就必须要remuse(恢复)几次,才能继续运行。
但remuse(恢复)的状态下,如果再进行一次resume(恢复)就会crash,所以要注册一个BOOL值的状态进行记录,防止多次suspend和resume引起闪退。
并且在suspend(暂停)的状态下,如果你设置_timer = nil就会crash

自己写的DEMO:https://github.com/YBYHunter/YUTimer

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在iOS开发的过程中定时器的使用比较频繁的,比较常见的场景是验证码的发送,或者是倒计时的展示.一般的需求我们直接使...
    我是何先生阅读 13,555评论 5 5
  • Dispatch Source Timer 的使用以及注意事项 Dispatch Source Timer 是一种...
    默着阅读 14,143评论 1 7
  • 简介 项目中有时候会碰到使用定时器的问题,其中GCD定时器因为比较精准,适用于许多场景,今天整理出来供大家借鉴。 ...
    sheldon_龙阅读 9,830评论 0 2
  • 最近看了一下 iOS 的定时器的使用,我们来模拟一个发送短信验证码时候的等待计时动画 要想了解定时器,首先需要了解...
    TomatosX阅读 4,839评论 0 0
  • 这几日着实的费心,单位本就要考试了,好多学生还不知怎么样呢,书也不背,作业也不太写,成绩一塌糊涂,没办法,就多上别...
    绿塬阅读 1,562评论 0 0

友情链接更多精彩内容