RAC - 定时器

作者: 下班不写程序 | 来源:发表于2020-10-19 13:49 被阅读0次

    文章系列
    《ReactiveCocoa 概述》
    《RACSignal》
    《RACDisposable》
    《RACSubject、RACReplaySubject(内附冷信号和热信号的区别)》
    《集合RACTuple、RACSequence》
    《RAC 中的通知、代理、KVO, 基本事件、方法的监听》
    《rac_liftSelector》
    《RACMulticastConnection》
    《RACCommand》
    《RAC - 核心方法bind》
    《RAC - 定时器》
    《RACScheduler》
    《RAC - 点击获取验证码 demo》
    《RAC - 映射(Map & flattenMap)》
    《RAC信号操作解释合集》
    《RAC - 信号的生命周期》

    注: 开发中过程中的使用,可参见实例

    《RAC - 点击获取验证码 demo》

    1. 初始化

    方法一:本质是调用方法二

    + (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler;
    

    方法一:

    + (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler withLeeway:(NSTimeInterval)leeway;
    

    interval: 每次执行之前等待的时间.
    scheduler: 定时器执行所在的线程, 可参见《RACScheduler》.
    leeway: 指的是一个期望的容忍时间,将它设置为1秒,意味着系统有可能在定时器时间到达的前1秒或者后1秒才真正触发定时器.在调用时推荐设置一个合理的 leeway 值,需要注意,就算指定 leeway 值为 0,系统也无法保证完全精确的触发时间,只是会尽可能满足这个需求.

    2. 源码分析

    1.RACQueueScheduler 的 的after 方法才是定时器的实现.
    2.本质封装的GCD 的定时器.
    3.after 方法的block 就是外界传进来的block.
    4.return 一个disposable 对象, [disposable dispose]时, 释放定时器. 也可理解成当结束订阅该信号时, 释放定时器.


    RACQueueScheduler 的after 方法才是定时器的实现方法

    3. 示例代码

    - (void)RAC_timerTest {
        
        // 创建定时器信号, 在主线程, 每1 秒执行一次.
        RACSignal *timerSignal = [RACSignal interval:1 onScheduler:RACScheduler.mainThreadScheduler];
        
        // 订阅该信号
        RACDisposable *disposable = [timerSignal subscribeNext:^(id  _Nullable x) {
            
            NSLog(@"timer: %@", x);
        }];
    
        // 在需要时, 释放定时器 (模拟3s 之后释放定时器)
        [RACScheduler.mainThreadScheduler after:[NSDate dateWithTimeIntervalSinceNow:3] schedule:^{
            
            [disposable dispose];
        }];
    }
    
    打印结果: 打印三次, 释放定时器

    .End

    相关文章

      网友评论

        本文标题:RAC - 定时器

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