美文网首页
小驴拉磨之—ReactiveCocao(RAC)响应式编程初识

小驴拉磨之—ReactiveCocao(RAC)响应式编程初识

作者: 小驴拉磨 | 来源:发表于2017-12-26 22:17 被阅读35次

    1、概述

    ReactiveCocao(以下简称RAC)和ReactExtentsion(以下简称RXSwift)都是响应式编程,但是RAC是一个框架,RXSwift是一个在swift本身的语言特性上的响应式的一个扩展。ReactiveCocao是一个框架总称,在ReactiveCocao下面有四大家族:

    • ReactiveCocao:一般大家说的就是这个它包含OC和Swift的代码。
    • ReactiveObjc:它包含OC代码部分,如果你的项目是纯OC项目建议使用这个。
    • ReactiveSwift:它包含Swift的代码,如果你的项目是纯Swift项目可以使用这个,不过纯Swift项目建议使用RXSwift。
    • ReactiveBriged:如果你的项目是OC和Swift混编建议使用这个。

    2、什么是响应式编程?

    官方概念:响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。特码其实我都看不明白,举个实际的列子:在我们编程中经常遇到这样的情况,模型person的name = 张三,age = 20,在view中显示name:张三、age:20等信息,我们将模型数据数据改变,我们需要重新调用view中的代码来更改UI。使用响应式编程后不需要在中心调用设置UI代码。如图:画的不好欢迎吐槽~~~

    正常情况下:


    Snip20171226_16.png

    使用响应式编程

    Snip20171226_18.png

    3、RAC能做什么?

    他能接管苹果所有的监听事件,例如我们常使用的addTarget、代理、通知以及KVO。

    4、RAC安装

    使用cocopods安装即可

    pod search "ReactiveObjC"
    搜索成功后粘贴 pod 'ReactiveObjC',  ~> 3.0.0
    需要别的pod对应的库
    

    安装完后引入头文件#import “ReactiveObjC.h",编译通过,敲出RAC能够看到对应RAC的东西,那就没问题喽。

    下面附上一张图希望大家喜欢


    Snip20171226_21.png

    5、RAC的原理

    Snip20171226_24.png

    6、RAC的使用

    • 基本使用
    //RAC初级用法
    - (void)dome1 {
        //1、创建信号
        RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
            //3、发送信号
            [subscriber sendNext:@"我是ARC"];
            
            return nil;
        }];
        //2、订阅信号
        [signal subscribeNext:^(id  _Nullable x) {
            NSLog(@"%@",x);
        }];
        
    }
    

    高级点用法

    - (void)demo2 {
        //1、创建信号
        [[RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
            //3、发送信号
            [subscriber sendNext:@"我是ARC"];
            return nil;
        }] subscribeNext:^(id  _Nullable x) {////2、订阅信号
            NSLog(@"%@",x);
        }];
    }
    

    常用的一些,例如监听UIButton

    -(void)demo3{
        [[self.btn rac_signalForControlEvents:(UIControlEventTouchUpInside)]subscribeNext:^(__kindof UIControl * _Nullable x) {
            NSLog(@"%@",x);
        }];
    }
    

    监听UITextField

    -(void)demo2 {
        
        @weakify(self);
        [[self.testTextFileld rac_textSignal] subscribeNext:^(NSString * _Nullable x) {
        
            NSLog(@"%@",x);
        @strongify(self);
            self.testTextFileld.text = @"Hello";
        }];
    }
    

    监听程序进入后台

    -(void)demo4{
        [[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil] subscribeNext:^(NSNotification * _Nullable x) {
            NSLog(@"%@",x);
        }];
    }
    

    使用RAC需要注意的问题

    注意循环引用,在block中使用self,一定注意循环引用。

    ARC提供了两个宏:

    @weakify(self)打断循环引用
    @strongify(self) 防止提前对象被释放
    这两个宏一定要成对使用不要只使用@weakify(self)或者@strongify(self) 。
    

    相关文章

      网友评论

          本文标题:小驴拉磨之—ReactiveCocao(RAC)响应式编程初识

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