RAC - RACSubject

作者: 南山青稞酒 | 来源:发表于2018-08-12 13:59 被阅读8次
  • RACSubject :信号提供者,自己可以充当信号,又能发送信号。

     使用场景:通常用来代替代理,实现传值
    
  • RACReplySubject :重复提供信号类,RACSubject的子类

    RACReplaySubject 与RACSUbject区别:
        - RACReplaySubject 可以先发送信号,再订阅信号 ,RACSubject不可以
    
        - 使用场景 :
            - 如果一个信号没被订阅一次,就需要把之前的值重新发送一遍,使用重复提供信号类
            - 可以设置capacity数量来限制缓存的value的数量,即只缓充最新的几个值
    
    
```
 // RACSubject 使用    
// 创建信号
    [RACSubject subject] 跟RACSignal不一样 创建信号时没有bloc
// 订阅信号
 - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock
// 发送信号
 sendNext:(id)value
 

RACSubject: 底层实现的RACSignal不一样

-  调用subsrcibeNexrt订阅信号 只是把订阅者保存起来 并且订阅者的nextBlock已经赋值了
-  调用sendNext发送信号 , 遍历刚刚保存的多有订阅者,一个一个调用订阅者的nexrBolck

```


```
 1. 创建信号

RACSubject * subject = [RACSubject subject];

[subject subscribeNext:^(id  _Nullable x) {
   //block 调用时刻: 当信号发出新值 就会调动
    NSLog(@"第一个订阅者 调用");
}];

[subject subscribeNext:^(id  _Nullable x) {
   //多次订阅 也会调用
    NSLog(@"第二个订阅者 调用");
}];


[subject sendNext:@1];
```
  /**
    RACReplaySubject 使用步骤:
    
    -  创建信号 [RACSubject subject] , 跟RACSignal 不一样 创建的时候没有block
    
    - 可以先订阅信号 也可以先发送信号
    
    - 订阅信号 - (RACDisposable *) subcribeNext:()
    
    */
    
    
    /**
     RACReplysubject底层实现和RACSubject不一样
     
        -  调用sendNext发送信号,把值保存起来,然后便利刚刚所有保存起来的所有订阅者,一个一个调用订阅者的nextBlock
        -  调用subscribeNext订阅信号,遍历保存的所有值,一个一个调用订阅者的nextBlock
          如果当一个信号被订阅,就重复播放之前所有值,需要先发送信号,在订阅信号;也就是先保存值,在订阅信号
     */
    
    RACReplaySubject * repleySubject =[RACReplaySubject subject];
    
    [repleySubject sendNext:@1];
    
    [repleySubject sendNext:@2];
    
    [repleySubject subscribeNext:^(id  _Nullable x) {
     
        NSLog(@"第一个订阅者接收到的数据%@",x);

    }];
    
    
    [repleySubject subscribeNext:^(id  _Nullable x) {
        
        NSLog(@"第二个订阅者接收到的数据%@",x);
        
    }];
    

相关文章

  • RAC - RACSubject

    RACSubject :信号提供者,自己可以充当信号,又能发送信号。 使用场景:通常用来代替代理,实现传值 RAC...

  • RAC+MVVM 用法大全

    RAC+MVVM在实际开发中的常用用法 RACSignal RACSubject RACSubject 在使用中我...

  • RAC框架源码解析之RACSubject的使用场景一

    1、RACSubject的运用场景 前面说到RACSubject既能 订阅信号 又能 发送信号 ,RAC可以代替我...

  • ReactiveCocoa(3)高级用法

    这篇主要运用RACSubject 先复习下第一篇中说到的RACSubject,话不多说,上来就是RAC三部曲 OK...

  • RAC_2.RACSubject

    2. RACSubject 使用场景:通常用来代替代理,有了它,就不必要定义代理了。 示例代码: 实际应用 JJV...

  • 04RAC-RACSubject

    我们完全可以用RACSubject代替代理/通知,确实方便许多 点击第二个控制的按钮,返回第一个控制器,并将“po...

  • iOS RAC - RACSubject、RACReplaySu

    文章系列《RACSignal 》《RACDisposable》《RACSubject、RACReplaySubje...

  • RAC中的RACSubject

    rac中热信号的源头,继承于RACSignal用法比较简单,如下: 看log可以看出racsubject和racs...

  • rac开发中的使用场景

    代替代理: 1.RACSubject好处是可以传参 2.rac_signalForSelector好处是使用简单,...

  • 『可变』的热信号 RACSubject

    原文 请您阅读原文『可变』的热信号 RACSubject ,作者 Draven。声明:本文只用做RAC相关知识点梳...

网友评论

    本文标题:RAC - RACSubject

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