01-RAC之RACSignal 和RACSubject

1. 什么是RAC?

RAC是一个开源的框架,其学名为函数响应式编程

2.RACSignal小试

RACSignal是一个信号类,它的主要作用是:

  • 创建一个信号;
  • 通过订阅者,订阅这个信号;
  • 发送信号;
    来实现事件的响应。

RACDisposable这个类:可以帮忙取消信号。

利用RACSignal简单实现一下代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    //RACSignal: 信号类,当我们有数据产生,创建一个信号!
    //1.创建信号(冷信号!)
    //didSubscribe调用:只要一个信号被订阅就会调用!!
    //didSubscribe作用:利用subscriber发送数据!!
    RACSignal * signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
        //3.发送数据subscriber它来发送
        [subscriber sendNext:@"呵呵哈哈嘿嘿"];
        
        return nil;
    }];
    
    
    //2.订阅信号(热信号!!)
    //nextBlock调用:只要订阅者发送数据就会调用!
    //nextBlock作用:处理数据,展示UI界面!
    [signal subscribeNext:^(id x) {
        //x:信号发送的内容!!
        NSLog(@"%@",x);
    }];
    
}

当运行代码时,就会打印“呵呵哈哈嘿嘿”。

3. RACSignal 的内部实现解读

  • 首先,创建信号:当我们通过createSignal这个方法创建一个信号时,需要传一个block,进入createSignal,查看方法如下:
    在这里插入图片描述
    从源码中,可以知道,RACSignal的create方法其实是调用RACDynamicSignal这个类的createSignal:方法,并把block赋值给这个RACDynamicSignal这个类的create方法:
    在这里插入图片描述
    RACDynamicSignal这个类创建了一个RACDynamicSignal类型的对象,同时保存了block,并返回。等于说,当我们调用RACSignalcreateSignal这个方法创建一个信号时,返回的是RACDynamicSignal的对象。

  • 其次,订阅信号:当我们调用RACSignalcreateSignal创建完对象signal后,用这个signal调用subscribeNext:这个方法订阅信号。只要一订阅信号,就一定会走第一步的block。
    在这里插入图片描述
    这个方法,其实是根据subscribeNext:这个方法传进来的block,生成一个RACSubscriber类型的对象。再用self调用subscribe的方法。
    从上个方法可以,这个self真正的调用者是RACDynamicSignal的这个对象。因此查看订阅的方法subscribe:如下:
    在这里插入图片描述
    上个图片中,有个self.didSubscribe, 这个也就是第一步创建信号时传进来的block。
    等于说,当执行到

[signal subscribeNext:^(id _Nullable x) {
NSLog(@“接收到了数据:%@”,x);
}];

这段代码时,就会调用第一步创建信号的block,并把创建RACSubscriber类型的对象返回到block中,即:
在这里插入图片描述

  • 最后,发送信号:当调用sendNext:方法时,会调用RACSubcriber类的方法实现:
    在这里插入图片描述
    从上图中,可以看出执行第二步中的nextBlock。

综上所述,可整理成一个流程图如下:
在这里插入图片描述

4.RACSubject的使用

RACSubject就是一个既可以创建信号也可以发送信号的类,具体实现就不细说了,主要说说其简单使用:

  • 声明一个RACSubject的属性
    在这里插入图片描述

  • 在需要发送信号的地方实现创建和发送的代码:
    在这里插入图片描述

  • 在需要接收信号的地方实现代码:
    在这里插入图片描述
    这样就可以了。确实方便很多,用起来吧,爽歪歪~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值