RAC学习基础应用(三)--RACSubject/RACBehaviorSubject/RACReplaySubject

  • RACSubject
    继承自 RACSignal,所以signal能用的他都能用啦
    另外 RACSubject是信号提供者,自己可以充当信号,又能发送信号。一篇文章中说它是用于桥接非 RAC 代码到 ReactiveCocoa 世界的『可变』信号(好腻害的样纸用法却很简单)
    创建方法:
    (1)创建RACSubject
    (2)订阅信号
    (3)发送信号
    工作流程:
    (1)订阅信号时,内部保存了订阅者,和订阅者响应block
    (2)当发送信号的,遍历订阅者,调用订阅者的nextBlock
    注:如果订阅信号,必须在发送信号之前订阅信号,不然收不到信号
//RACSignal 创建信号
    //RACSubcriber 发送信号
    //RACSubject 既可以创建信号 也可以发送信号

    //1创建信号
    RACSubject *subject = [RACSubject subject];
    //2.订阅信号
    [subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"111接收到信号 %@",x);
    }];

    //3.发送数据
    [subject sendNext:@1];

    [subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"222接收到信号 %@",x);
    }];

    //3.发送数据
    [subject sendNext:@2];

这里写图片描述

  • RACBehaviorSubject
    它在内部会保存一个 currentValue 对象,也就是最后一次发送的消息,在每次执行 -sendNext: 时,都会对 RACBehaviorSubject 中保存的 currentValue 进行更新,并使用父类的 -sendNext: 方法,向所有的订阅者发送最新的消息
        RACBehaviorSubject *subject = [RACBehaviorSubject subject];

    [subject sendNext:@100];
    [subject sendNext:@101];
    [subject sendNext:@102];
    [subject sendNext:@103];

    //2.订阅信号
    [subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"111接收到信号 %@",x);
    }];

    //3.发送数据
    [subject sendNext:@1];

    [subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"222接收到信号 %@",x);
    }];

    //3.发送数据
    [subject sendNext:@2];
    [subject sendNext:@210];
    [subject sendNext:@211];

    [subject sendCompleted];

这里写图片描述

  • RACReplaySubject
    (1)创建RACSubject
    (2)订阅信号
    (3)发送信号
    工作流程:
    (1)订阅信号时,内部保存了订阅者,和订阅者响应block
    (2)当发送信号的,遍历订阅者,调用订阅者的nextBlock
    (3)发送的信号会保存起来,当订阅者订阅信号的时,会将之前保存的信号,一个一个作用于新的订阅者,保存信号的容量由capacity决定,这也是有别有RACSubject的,发送所有的消息
RACReplaySubject *subject = [RACReplaySubject subject];
    //2.订阅信号
    [subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"111接收到信号 %@",x);
    }];
    //3.发送数据
    [subject sendNext:@1];
    [subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"222接收到信号 %@",x);
    }];
    //3.发送数据
    [subject sendNext:@2];

这里写图片描述

摘录参考文章
『可变』的热信号 RACSubject

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值