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) 。