美文网首页
[基础]RACSubject

[基础]RACSubject

作者: 古愿狼 | 来源:发表于2016-11-22 10:01 被阅读0次

一些知识点

  • RACSubject继承与RACSignal,并且遵循RACSubscriber协议,因此既能当信号,也能发送信号
  • 通常用来代替代理

RACSubject的派生类

  • RACGroupedSignal :分组信号,用来实现 RACSignal 的分组功能。
  • RACBehaviorSubject :重演最后值的信号,当被订阅时,会向订阅者发送它最后接收到的值。
  • RACReplaySubject :重演信号,保存发送过的值,当被订阅时,会向订阅者重新发送这些值。

RACReplaySubject和RACSubject的区别

  • RACSubject必须先订阅信号,才能接收到信号
    1.调用sendNext时,不会保存值,会遍历保存的所有订阅者并执行其nextBlock。
    2.调用subscribeNext时,只是把订阅者和其nextBlock保存起来,但不执行。

  • RACReplaySubject可以先发送信号,再订阅信号
    1.调用sendNext时,会把值保存起来,然后遍历保存的所有订阅者并执行其nextBlock。
    2.调用subscribeNext时,遍历保存的所有值,分别调用本次subscribeNext的订阅者的nextBlock。(就是说当前有多少个值,就调用多少次本次订阅者的nextBlock)

// 1.创建信号 
RACSubject *subject = [RACSubject subject];

//在订阅前发送的话,这个消息是不会被接收到的
[subject sendNext:@"0"];

// 2.订阅信号 
[subject subscribeNext:^(id x) { 
    NSLog(@"第一个订阅者%@",x);
}];
[subject subscribeNext:^(id x) {
    NSLog(@"第二个订阅者%@",x);
 }];
// 3.发送信号 
[subject sendNext:@"1"];

//输出
//第一个订阅者 1
//第二个订阅者 1
//第一个订阅者 2
//第二个订阅者 2
// 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);
}];

//注意如果之后再发送信号,就会按订阅者的顺序发送消息
[replaySubject sendNext:@3];


//输出
//第一个订阅者接收到的数据 1
//第一个订阅者接收到的数据 2
//第二个订阅者接收到的数据 1
//第二个订阅者接收到的数据 2
//第一个订阅者接收到的数据 3    <-- 注意这里后面的顺序变回了“一、二”
//第二个订阅者接收到的数据 3

相关文章

  • [基础]RACSubject

    一些知识点 RACSubject继承与RACSignal,并且遵循RACSubscriber协议,因此既能当信号,...

  • ReactiveCocoa方法总结

    基础部分 1、RACSubject当做代理使用 步骤一:在第二个控制器.h,添加一个RACSubject代替代理。...

  • RAC学习笔记(二)

    热信号RACSubject RACSubject是RACSignal的子类,RACSubject实现了RACSub...

  • RAC flattenMap

    flattenMap: RACSubject * subject = [RACSubject subject]; ...

  • RAC

    RACSubject 分析 step1: 先看下RACSubject 发现RACSubject继承于RACSign...

  • RAC 忽略重复信号distinctUntilChanged

    //创建 RACSubject *subject = [RACSubject subject];// [sub...

  • RAC组合Merge

    Merge: //创建信号 RACSubject *signalA = [RACSubject subject]...

  • RAC 忽略 ignore

    ignore RACSubject *subject = [RACSubject subject]; //忽略一...

  • RAC学习笔记

    零、类结构关系 1.RACSubject::RACSignal::RACStream. 2.最基础的东西:创建信号...

  • RAC take指定信号

    RACSubject *subject = [RACSubject subject]; //take指定拿前面的...

网友评论

      本文标题:[基础]RACSubject

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