美文网首页
RACSubject和RACReplaySubject

RACSubject和RACReplaySubject

作者: 小胖子2号 | 来源:发表于2016-12-03 18:04 被阅读22次

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
}

相关文章

网友评论

      本文标题:RACSubject和RACReplaySubject

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