RAC - RACSignal

作者: 南山青稞酒 | 来源:发表于2018-08-12 09:29 被阅读12次

信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据们就会马上发出数据。

  • 信号类,只是表示当前数据改变时,信号内部会发出数据,它本身不具备发送信号的能力,而是交给内部一个订阅者发出。
  • 默认一个信号是冷信号 ,也就是值改变了,也不会触发,只有订阅了这个信号,才会变为热信号值改变了才会触发。
  • 如何订阅信号:调用信号RACSignal 的 subscribeNext方法就可以订阅。

RACSignal 简单使用

- (void)viewDidLoad {
    [super viewDidLoad];
    //RACSignal 底层实现
    
    /*
     // RACSignal底层实现:
     // 1.创建信号,首先把didSubscribe保存到信号中,还不会触发。
     // 2.当信号被订阅,也就是调用signal的subscribeNext:nextBlock
     // 2.2 subscribeNext内部会创建订阅者subscriber,并且把nextBlock保存到subscriber中。
     // 2.1 subscribeNext内部会调用siganl的didSubscribe
     // 3.siganl的didSubscribe中调用[subscriber sendNext:@1];
     // 3.1 sendNext底层其实就是执行subscriber的nextBlock
    */
    
    //RACSignal 使用步骤:
    
    // 创建信号
    
    RACSignal * signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        
        // block 时刻被调用 : 每当有订阅者订阅信号,就会调用信号
        
        
        // 发送数据
        [subscriber sendNext:@1];
        
        
        // 如果不在发送数据 ,最好发送信号完成 ,内部会自动调用 [RACDisposable disposable] 取消订阅信号
        
        [subscriber sendCompleted];
        
        return [RACDisposable disposableWithBlock:^{
            // block 调用时刻 :当信号 发送完成或者发送错误,就会自动执行这个block 取消订阅信号
            
            // 执行完block 当前信号就不会在被订阅了
            
            // 执行完 后 信号就会被销毁  再次发送数据也不会被调用了
        }];
    }];
    
    
    
    
    // 订阅信号
    
    // 不订阅信 ,信号一直处于冷信号状态 只有订阅后 信号处于被激活状态
    
    [signal subscribeNext:^(id  _Nullable x) {
        // 每当 有信号发送数据  这个block 就会被调用
        NSLog(@"%@",x);
    }];
}


  • RACSubscriber :表示订阅者的意思 ,用于发送信号,这是一个协议,不是一个类,只用遵守这个协议,并且实现方法才能成为订阅者,通过create 创建信号。

  • RACDisposable 用于取消信号或者清理资源

    • 使用场景:不惜那个监听某个信号,可以主动取消订阅信号

相关文章

  • RACSignal介绍

    RACSignal 在RAC中最核心的类RACSignal,搞定这个类就能用ReactiveCocoa了。 RAC...

  • (一)、iOS RAC - RACSignal

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

  • RAC的基本使用

    RAC的基本使用 在RAC中,一切都是信号! RACSignal RACSignal实例化一个信号,首先,需要创建...

  • RAC 组合combine

    RAC(_btn,enabled) = [RACSignal combineLatest:@[_accountTe...

  • iOS开发 「RAC」用RAC实现界面有多个请求都完成后再刷新界

    - (RACSignal *)rac_liftSelector:(SEL)selector withSignals...

  • RAC - RACSignal

    信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据们就会马上发出数据。 信号类,只是表示当前数据改...

  • Rac迭代

    Rac迭代、绑定、JoinRACStream、RACSignal、RACSequence 1、RACSequenc...

  • RAC学习(一)RACSignal & RACDispo

    一、RAC是什么? 二、RAC有什么用? 三、引入RAC OC版本 四、详解 1、RACSignal:信号类 创建...

  • RAC源码解析

    RAC是一个函数响应编程框架。 先来一个简单的RAC使用: RACSignal使用步骤:1.创建信号 + (RAC...

  • ReactiveCocoa1

    RACSignal RAC中统一的数据接口,控件的事件,包括KVO,timer都可以转化成RACSignal。 创...

网友评论

    本文标题:RAC - RACSignal

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