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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏风中追风

分布式基础__session 和 cookie的差异

HTTP协议是一种无状态的 通信协议 。那么这就以为着 客户端按道理是需要每次请求之前都要和服务器做连接的。 但是每次都进行这种连接,会非常耗时,并且这些重复...

38610
来自专栏linux驱动个人学习

中断标志位 IRQF_ONESHOT

1414
来自专栏bboysoul

什么是EOF

EOF的意思是End Of File是文件尾的标志。在数值上来说就是-1。 当在文件操作的时候,碰到文件结束,或者数据读取错误是均会返回EOF。 在linu...

892
来自专栏电光石火

EMLOG无插件实现网站源码压缩

在以往的Emlog优化教程中,相信都是使用的代码压缩插件,今天主要是分享插件的代码版本,也就是不使用插件,直接将代码丢在module.php中就可以,好吧,又消...

2665
来自专栏技术碎碎念

同步/异步,阻塞/非阻塞

什么是同步和异步 同步和异步是针对应用程序和内核的交互而言的, 同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程触发IO...

3236
来自专栏遊俠扎彪

inux (CentOS 5.6) 安装 Sun JDK (切换自带OpenJDK)

可根据需要卸载不需要的JDK Version

1948
来自专栏移动端周边技术扩展

github中存放预览网页

771
来自专栏Java进阶

再谈session 和 cookie的差异

2678
来自专栏deepcc

最新jQuery引用google地址外部文件(jquery 1.2.6至jquery1.7.2)

33210
来自专栏中国白客联盟

Android动态调试(三)Xposed hook

1142

扫码关注云+社区