小驢拉磨之—ReactiveCocao(RAC)響應式編程初識

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) 。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容