美文网首页
iOS开发「RAC」RAC的定时、延时、超时方法

iOS开发「RAC」RAC的定时、延时、超时方法

作者: 俺不是大佬儿 | 来源:发表于2021-11-06 10:08 被阅读0次

延时执行方法

GCD的延时方法

    // 延时执行
    dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0/** 延时的时间*/ * NSEC_PER_SEC));
    dispatch_after(delayTime, dispatch_get_main_queue(), ^{
        NSLog(@"延时1秒时间到~")
    });

RAC延时方法

// 延时执行
   [[RACScheduler mainThreadScheduler]afterDelay:1.0 schedule:^{
        NSLog(@"延时1秒时间到~")
   }];

delay: 延迟发送

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    NSLog(@"计时开始");
    RACSignal *racDelay = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        [subscriber sendNext:@"一秒后接收"];
        return nil;
    }];
    [[racDelay delay:1.0] subscribeNext:^(id  _Nullable x) {
        NSLog(@"什么嘛:%@",x);
    }];
}

控制台结果

--TIME:09:25:46.408000+0800【FILE:MyIntegralInfoVc.m--LINE:30】FUNCTION:-[MyIntegralInfoVc viewDidLoad]
计时开始

--TIME:09:25:47.507000+0800【FILE:MyIntegralInfoVc.m--LINE:36】FUNCTION:-[MyIntegralInfoVc viewDidLoad]_block_invoke_2
什么嘛:一秒后接收

//看这输出结果 大概是 1 秒 貌似不是非常精准的1秒但确实是有延迟

interval 定时:每隔一段时间发出一次信号

    NSLog(@"计时开始");
    [[RACSignal interval:1.0 onScheduler:[RACScheduler currentScheduler]] subscribeNext:^(id x) {
        NSLog(@"每隔1秒发送一次信号%@",x);
    }];

控制台结果


--TIME:09:58:56.541000+0800【FILE:MyIntegralInfoVc.m--LINE:30】FUNCTION:-[MyIntegralInfoVc viewDidLoad]
计时开始

--TIME:09:58:57.542000+0800【FILE:MyIntegralInfoVc.m--LINE:32】FUNCTION:-[MyIntegralInfoVc viewDidLoad]_block_invoke
每隔1秒发送一次信号2021-11-06 01:58:57 +0000
--TIME:09:58:58.542000+0800【FILE:MyIntegralInfoVc.m--LINE:32】FUNCTION:-[MyIntegralInfoVc viewDidLoad]_block_invoke
每隔1秒发送一次信号2021-11-06 01:58:58 +0000
--TIME:09:58:59.542000+0800【FILE:MyIntegralInfoVc.m--LINE:32】FUNCTION:-[MyIntegralInfoVc viewDidLoad]_block_invoke
每隔1秒发送一次信号2021-11-06 01:58:59 +0000
--TIME:09:59:00.542000+0800【FILE:MyIntegralInfoVc.m--LINE:32】FUNCTION:-[MyIntegralInfoVc viewDidLoad]_block_invoke
每隔1秒发送一次信号2021-11-06 01:59:00 +0000

... ...

timeout 超时,可以让一个信号在一定的时间后,自动报错

    NSLog(@"计时开始");
    RACSignal *racTimeout = [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        [subscriber sendNext:@"超时后发送error信号"];
        return nil;
    }] timeout:2.f onScheduler:[RACScheduler currentScheduler]];
    
    [racTimeout subscribeNext:^(id  _Nullable x) {
        NSLog(@"什么嘛:%@",x);
    }error:^(NSError * _Nullable error) {
        NSLog(@"timeout:%@",error);
    }];

控制台结果

--TIME:09:52:24.145000+0800【FILE:MyIntegralInfoVc.m--LINE:30】FUNCTION:-[MyIntegralInfoVc viewDidLoad]
计时开始

--TIME:09:52:24.146000+0800【FILE:MyIntegralInfoVc.m--LINE:37】FUNCTION:-[MyIntegralInfoVc viewDidLoad]_block_invoke_2
什么嘛:超时后发送error信号

--TIME:09:52:26.146000+0800【FILE:MyIntegralInfoVc.m--LINE:39】FUNCTION:-[MyIntegralInfoVc viewDidLoad]_block_invoke_3
timeout:Error Domain=RACSignalErrorDomain Code=1 "(null)"

\color{gray}{欢迎大佬来指正纠错,共同学习😏!!}

相关文章

  • iOS开发「RAC」RAC的定时、延时、超时方法

    延时执行方法 GCD的延时方法 RAC延时方法 delay: 延迟发送 控制台结果 interval 定时:每隔一...

  • 2019-12-10

    iOS开发之RAC(一)初级篇 一、RAC是什么? 1、RAC全称:ReactiveCocoa, Github 一...

  • 【other】Rac EventBus RxJava

    聊一聊 Rac Rac 是什么 Rac 全称 Reactivecocoa,是一个应用于iOS和OS X开发的框架,...

  • (一)、iOS RAC - RACSignal

    (一)、iOS RAC - RACSignal (二)、iOS RAC - RACDisposable(三...

  • RAC开篇编程思想:Masory中的链式编程思想

    RAC是github开源的iOS和OS开发的框架,全称ReactiveCocoa。RAC主要应用函数响应式编程思想...

  • RAC信号组合

    转自iOS开发 「RAC」RAC信号组合的妙用[https://www.jianshu.com/p/eba85d2...

  • RAC基础

    最近接触学习到了RAC(ReactiveCocoa),RAC是函数式+响应式编程结合 我们在iOS开发中,页面之间...

  • RAC简介

    前言 RAC是iOS开发中经常使用到响应式框架,在OC中可以通过pod导入 RAC信号创建与发送 RAC中一个常见...

  • ReactiveCocoa详解

    一、RAC介绍 RAC 是一个 iOS 中的函数式响应式编程框架,一般与MVVM配套使用。在非RAC开发中,都是习...

  • ReactiveCocoa的bind方法

    RAC的Bind方法 RAC提供了一堆可以提高开发效率的方法,比如filter,map,flattenMap等值处...

网友评论

      本文标题:iOS开发「RAC」RAC的定时、延时、超时方法

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