iOS GCD定时器

作者: userName | 来源:发表于2018-04-19 13:59 被阅读545次

    定时器需求

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

    相关文章

      网友评论

        本文标题:iOS GCD定时器

        本文链接:https://www.haomeiwen.com/subject/wqfwkftx.html