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

2017-12-26  本文已影响35人  小驴拉磨

1、概述

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

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) 。
上一篇下一篇

猜你喜欢

热点阅读