前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS GCD定时器

iOS GCD定时器

作者头像
大壮
发布2018-06-19 14:43:32
1.4K0
发布2018-06-19 14:43:32
举报
文章被收录于专栏:大壮大壮

定时器需求

先说需求我们需要一个定时器,包含开启,暂停,恢复,关闭。线程安全 并且不需要管理他的内存,无论在什么状态只要持有他的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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.04.19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定时器需求
  • 约定
  • 注意事项
    • 1. dispatch_source_set_event_handler 回调是一个block,所以很容易会出现循环引用问题。
      • 2.关于dispatch_suspend与dispatch_resume
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档