YYTimer

作者: 我去敲代码 | 来源:发表于2016-11-08 11:30 被阅读581次

    yykit是一位大神出品的iOS开发三方库,本人计算机基础薄弱,在阅读源码过程中遇到一些困惑,自己在此作一些记录。今天就写一篇YYTimer的学习笔记。

    #define LOCK(...) dispatch_semaphore_wait(_lock, DISPATCH_TIME_FOREVER); \

    __VA_ARGS__; \

    dispatch_semaphore_signal(_lock);

    这个宏声明了一个LOCK的函数,(...)表示传递的是可变参数,这是c语言中的语法。__VA_ARGS__表示列出可变参数,在该代码中给LOCK传递的是表达式。首位两行的作用是防止多线程造成资源存取错误的一种同步机制。

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 如果semaphore计数大于等于1.计数-1,返回,程序继续运行。这里设置了一直等待。dispatch_semaphore_signal(semaphore);计数+1。这样一次只有一个线程可以进入执行代码。

    _source = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());

    dispatch_source_set_timer(_source, dispatch_time(DISPATCH_TIME_NOW, (start * NSEC_PER_SEC)), (interval * NSEC_PER_SEC), 0);

    dispatch_source_set_event_handler(_source, ^{[_self fire];});

    dispatch_resume(_source);

    用dispatch_source在主线程创建了一个任务的定时调度。

    相关文章

      网友评论

          本文标题:YYTimer

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