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 条评论
登录 后参与评论

相关文章

来自专栏听雨堂

asp.net中几种页面元素的比较

学习ASP.NET也快三个月了,今天才对页面中几种不同元素区分开,惭愧! 1)HTML元素:跟普通的网页中的标签所定义的一样,没有服务器端的事件响应,能够直接...

18210
来自专栏小怪聊职场

爬虫课堂(二十)|编写Spider之使用Item Pipeline处理数据

2605
来自专栏Python

python文件和目录操作方法大全

一、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.get...

1776
来自专栏Petrichor的专栏

python: IO操作

813
来自专栏机器学习算法与理论

QT生成动态链接库.so文件

首先是新建一个工程,选择C++库,打开后是这样的4 ? 然后输入新建的名称,下一步,记得勾选Qtcore那个(就是默认的那个),否则编译似乎不能通过。因为后面自...

5129
来自专栏coder修行路

Django 中url补充以及模板继承

Django中的URL补充 默认值 在url写路由关系的时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"...

1736
来自专栏散尽浮华

时区提示:Local time zone must be set--see zic manual page 2018的解决办法

问题描述:在centos服务器上执行date命令时,显示的时间信息中的时区不正常,如下: [root@ulocalhost ~]# date Mon Apr ...

4135
来自专栏自由而无用的灵魂的碎碎念

解决source insight 3.5遇到的parse too comples错误

我使用source insight 编写c,编写代码的时候,source insight的symbol windows可能会提示parse too comple...

872
来自专栏抠抠空间

Django处理流程

用户通过浏览器发送请求 请求到达request中间件,中间件对request请求做预处理或者直接返回response 若未返回response,会...

3046
来自专栏吾爱乐享

php学习之html–精彩回顾(七)

1273

扫码关注云+社区