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在主线程创建了一个任务的定时调度。

相关文章

  • iOS YYTimer 源码阅读

    YYTimer 源码阅读 根据 YYTimer 头文件提示, YYTimer 是一个线程安全的类,和 N...

  • YYTimer

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

  • YYTimer源码阅读

    YYTimer是一个基于GCD的线程安全的计时器,它的API和NSTimer类似。有以下几种不同点: 基于GCD,...

  • YYTimer的学习

    定时器用了那么多年,从来没有想过如何自己实现,除了for循环加上线程的sleep,没有想到更好的方法。等看到代码 ...

  • 『ios』YYTimer 源码分析

    yy系列一直都在用,最近打算抽出时间来仔细阅读下大神的源码。因为今天第一眼就看到yytimer了,所以第一个由他开...

  • YYTimer的使用小问题

    必须设置为全局的timer,否则运行一次,不再运行 思考一下为什么: YYTimer的实现可以看得出,当不再持有t...

  • YYKit源码探究(八十六) —— 定时器YYTimer(一)

    版本记录 前言 iOS圈内有几个人大家基本都知道,比如说王巍、唐巧,还有YYKit框架的作者现任职于滴滴的郭曜源 ...

网友评论

      本文标题:YYTimer

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