RACSubject和RACReplaySubject

RACSubject使用步骤

  • 1.创建信号 [RACSubject subject],跟RACSiganl不一样,创建信号时没有block。
  • 2.订阅信号 - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock
  • 3.发送信号 sendNext:(id)value

RACSubject:底层实现和RACSignal不一样。

  • 1.调用subscribeNext订阅信号,只是把订阅者保存起来,并且订阅者的nextBlock已经赋值了。
  • 2.调用sendNext发送信号,遍历刚刚保存的所有订阅者,一个一个调用订阅者的nextBlock。
    • 不同信号订阅的方式不一样
    • RACSubject处理订阅:仅仅是保存订阅者

RACReplaySubject使用步骤:

  • 1.创建信号 [RACSubject subject],跟RACSiganl不一样,创建信号时没有block。
  • 2.可以先订阅信号,也可以先发送信号。
    • 2.1 订阅信号 - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock
  • 2.2 发送信号 sendNext:(id)value

RACReplaySubject:底层实现和RACSubject不一样。

  • 1.调用sendNext发送信号,把值保存起来,然后遍历刚刚保存的所有订阅者,一个一个调用订阅者的nextBlock。

  • 2.调用subscribeNext订阅信号,遍历保存的所有值,一个一个调用订阅者的nextBlock

    • 如果想当一个信号被订阅,就重复播放之前所有值,需要先发送信号,在订阅信号。
    • 也就是先保存值,在订阅值。
- (void)viewDidLoad {
    [super viewDidLoad];

     // 订阅信号
    [_redView.btnClickSignal subscribeNext:^(id x) {
       
        NSLog(@"%@",x);
    }];
}

- (void)RACReplaySubject
{
   // 1.创建信号
    RACReplaySubject *replaySubject = [RACReplaySubject subject];

    // 2.发送信号
    [replaySubject sendNext:@1];
    [replaySubject sendNext:@2];

    // 3.订阅信号
    [replaySubject subscribeNext:^(id x) {

        NSLog(@"第一个订阅者接收到的数据%@",x);
    }];

    // 订阅信号
    [replaySubject subscribeNext:^(id x) {

        NSLog(@"第二个订阅者接收到的数据%@",x);
    }];
}


- (void)RACSubject
{
    // 1.创建信号
    RACSubject *subject = [RACSubject subject];

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

    // 3.发送信号
    [subject sendNext:@"1"];
 
    // 保存订阅者
   
    // 底层实现:遍历所有的订阅者,调用nextBlock
    
    // 执行流程:
    
    // RACSubject被订阅,仅仅是保存订阅者
    // RACSubject发送数据,遍历所有的订阅,调用他们的nextBlock
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容