我是靠谱客的博主 复杂电话,最近开发中收集的这篇文章主要介绍01-RAC之RACSignal 和RACSubject1. 什么是RAC?2.RACSignal小试3. RACSignal 的内部实现解读4.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的属性
    在这里插入图片描述

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

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

最后

以上就是复杂电话为你收集整理的01-RAC之RACSignal 和RACSubject1. 什么是RAC?2.RACSignal小试3. RACSignal 的内部实现解读4.RACSubject的使用的全部内容,希望文章能够帮你解决01-RAC之RACSignal 和RACSubject1. 什么是RAC?2.RACSignal小试3. RACSignal 的内部实现解读4.RACSubject的使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部