美文网首页
ReactiveObjC框架学习及简单介绍

ReactiveObjC框架学习及简单介绍

作者: Felix的笔头 | 来源:发表于2018-01-19 18:49 被阅读0次

最近在一直在学习RAC框架的Object-C版本ReactiveObjC(Swift版本为ReactiveSwift),这篇文章简单展示一下学习的成果!!!如果有什么地方理解错误,欢迎大家指正!!!互相学习......

ReactiveObjC 这里只是抛砖引玉!!!如果有什么理解不到位的,欢迎批评指正,共同进步!!!

RAC框架中的继承关系(不包含分类)


1129722-20170703211823972-622987082.png

注意:

1、关于底层实现是三方已经自动帮我们实现的过程,我们只需要,学会使用步骤就行了,当然多了解底层原理有助于我们提升自己的能力!!!

2、不同类型信号的订阅,处理的事情不一样。

pragma mark -- RAC/RACSignal

RACSignal使用步骤:

1、创建信号: + (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe;

2、订阅信号:- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock;

3、发送信号:- (void)sendNext:(id)value;

特点:先订阅,后发送。

RACSignal底层实现:
1、创建信号:把didSubscribe(代码块)保存到信号中

2、订阅信号:调用signal的subscribeNext:(void (^)(id x))nextBlock

3、调用RACDynamicSignal的didSubscribe把订阅者传递过去

4、[subscriber sendNext:@1]; 调用订阅者的发送消息的方法,发送消息

5、执行nextBlock这个代码块

//代码实现
// 1. 创建订阅者
    RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        //3.发送信号 ,发送信号之前一定要先订阅信号
        [subscriber sendNext:@"RAC signal"];
        return nil;
    }];
    
    //2. 订阅信号
    [signal subscribeNext:^(id  _Nullable x) {
        NSLog(@"---%@",x);
    }];
    
    //控制台打印: ---RAC signal

图例


1129722-20170629191936321-1388848008.png

pragma mark -- RACSubject

RACSubject使用步骤:

1、创建信号: + (instancetype)subject;

2、订阅信号:- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock;

3、发送信号:- (void)sendNext:(id)value;

特点:先订阅,后发送。

RACSubject底层实现
1.调用subscribeNext订阅信号,把订阅者保存起来,并且订阅者的nextBlock中已经赋值了。
2.调用sendNext发送信号,遍历刚刚保存的所有订阅者,分别调用订阅者的nextBlock。

//代码实现
//1. 创建信号
    RACSubject *subject = [RACSubject subject];
    
    //2. 订阅信号
    [subject subscribeNext:^(id  _Nullable x) {
       //block 调用时刻 : 当信号发出新值 ,就会调用
        NSLog(@"第一个订阅者 %@",x);
    }];
    
    [subject subscribeNext:^(id  _Nullable x) {
        
        NSLog(@"第二个订阅者 %@",x);
    }];
    
    //3.发送信号
    [subject sendNext:@"RACSubject"];
    
   //控制台打印: 第一个订阅者 RACSubject
                 第二个订阅者 RACSubject

图例


1129722-20170629225320243-164179572.png

pragma mark -- RACReplaySubject

RACReplaySubject使用步骤:

1、创建信号: + (instancetype)subject;

2/3、订阅信号:- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock;

3/2、发送信号:- (void)sendNext:(id)value;

特点:可以先订阅信号,也可以先发送信号

RACReplaySubject底层实现

1.调用sendNext发送信号,把需要发送的信号保存起来,然后遍历刚刚保存的所有订阅者,一个一个调用订阅者的nextBlock。
2.调用subscribeNext订阅信号,遍历保存的所有值,一个一个调用订阅者的nextBlock

如果想要当一个信号被订阅,就重复播放之前所有值,需要先发送信号,在订阅信号。(也就是先保存值,再订阅值。)

每一个订阅者接收全部信号(信号已经全部保存完毕)

  //代码实现(先发送 ,后订阅)
 // 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);
    }];

//控制台打印:(先发送后订阅)
第一个订阅者接收到的数据1
第一个订阅者接收到的数据2
第二个订阅者接收到的数据1
第二个订阅者接收到的数据2

图例:(先发送后订阅)


1129722-20170703200338315-1560237486.png
//代码实现(先订阅,后发送 )

// 1.创建信号
    RACReplaySubject *replaySubject = [RACReplaySubject subject];
    
    // 2.订阅信号
    [replaySubject subscribeNext:^(id x) {
        
        NSLog(@"第一个订阅者接收到的数据%@",x);
    }];
    
    // 订阅信号
    [replaySubject subscribeNext:^(id x) {
        
        NSLog(@"第二个订阅者接收到的数据%@",x);
    }];
    
    // 3.发送信号
    [replaySubject sendNext:@1];
    [replaySubject sendNext:@2];

//控制台打印:(先订阅后发送)
第一个订阅者接收到的数据1
第二个订阅者接收到的数据1
第一个订阅者接收到的数据2
第二个订阅者接收到的数据2

图例:(先订阅后发送)


1129722-20170703201414019-812141403.png

相关文章

  • ReactiveObjC框架学习及简单介绍

    最近在一直在学习RAC框架的Object-C版本ReactiveObjC(Swift版本为ReactiveSwif...

  • Carthage安装

    今天学习ReactiveObjc。我没有用CocoaPods。所有就想着怎么导入框架。ReactiveObjc没有...

  • 1、关于ReactiveObjC使用简介

    本文是对ReactiveObjC部分使用介绍,原理及流程简介,见文章结尾 目录:1、简单使用2、UIKit (基...

  • ReactiveObjC使用简介

    文是对ReactiveObjC部分使用介绍,原理及流程简介,见文章结尾 目录: 1、简单使用 2、UIKit (基...

  • RPC简介及框架选择

    简单介绍RPC协议及常见框架,对比传统restful api和RPC方式的优缺点。常见RPC框架,gRPC及序列化...

  • RPC简介及框架选择

    简单介绍RPC协议及常见框架,对比传统restful api和RPC方式的优缺点。常见RPC框架,gRPC及序列化...

  • RAC的cocoapods安装问题(持续更新)

    iOS 使用cocoapods导入ReactiveCocoa和ReactiveObjC框架 cocoapods使用...

  • iOS - RAC(ReactiveObjC)的简单介绍

    本编文章是我对 MVVM + RAC 知识的一些学习总结了分享,如错误的地方,希望可以各位大佬积极指正。⛽️文章中...

  • ReactiveObjC简介

    最正确的方式要从读官方文档ReactiveObjc 开始 ReactiveObjC 是一个函数式响应式编程框架(f...

  • HealthKit学习

    HealthKit框架学习 本文结构 简介 用户数据安全及隐私 HealthKit框架介绍 HealthKit使用...

网友评论

      本文标题:ReactiveObjC框架学习及简单介绍

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