ReactiveCocoa 函式響應式程式設計簡介 鏈式程式設計 函數語言程式設計 響應式程式設計
最近,RAC的名氣可謂是越來越大,出於對技術的探索心(為了裝逼),最近研究學習了一下RAC,以下是本人在學習中對其的一些粗淺的認識;
首先,什麼是RAC,ReactiveCocoa時Github上的一個Cocoa FRP框架,目的為了接管蘋果的所有事件機制(addTarget,代理,通知,KVO,時鐘,網路處理);從其強大的作用就可以看出,這是一個超重量級大框架,慎用!
RAC運用的是函式響應式程式設計思想,那麼什麼是函式響應式程式設計思想,下面我們就從頭說起:
說到程式設計思想,我們熟悉的就是面向過程程式設計思想和麵向物件程式設計思想,面向過程 即根據問題,一步一實現,極其不利於程式碼的閱讀和維護;面向物件 是對程式碼的抽象處理,即萬物皆物件,由不同的物件,呼叫起自身的方法,實現相應的功能
下面來建立一個dog物件來具體分析下:
dog的.h檔案
#import <Foundation/Foundation.h>
@interface Dog : NSObject
- (void)run;
- (void)eat;
dog的.m檔案
#import "Dog.h"
@implementation Dog
- (void)run {
NSLog(@"%s", __FUNCTION__);
}
- (void)eat {
NSLog(@"%s", __FUNCTION__);
}
以下是在控制器中,建立dog類;
#import
#import "Dog.h"
@interfaceViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
Dog *dog = [Person new];
[dog run];
[dog eat];
以上就是面向物件程式設計的呼叫方法,只能單一點用,寫起來比較繁瑣;
接下來介紹鏈式程式設計思想,所謂鏈式程式設計,就是多個方法的呼叫可以像鏈條一樣連線在一起,使程式碼的書寫更簡潔,可讀性更好;
就像這樣:
[[dog run1] eat1];
要想實現方法的這種呼叫方式,可以這樣定義
- (Dog *)run1 {
NSLog(@"%s", __FUNCTION__);
return self;
}
- (Dog *)eat1 {
NSLog(@"%s", __FUNCTION__);
return self;
}
即每個方法都返回呼叫它的物件,以供呼叫後面的方法,這樣,返回的物件就像一個鏈條,連線起了每個方法;
下面說一下函數語言程式設計:
dog.run2().eat2();
dog.eat2().run2();
dog.run2().run2().eat2().run2();
要想實現這種呼叫方式,可以這樣定義方法
//返回一個Block,Block返回self;
- (Dog * (^)())run2 {
Dog * (^runBlock)() = ^ {
NSLog(@"run2");
return self;
};
return runBlock;
}
- (Dog *(^)())eat2 {
return ^ {
NSLog(@"吃");
return self;
};
}
通過Block返回的物件,呼叫後面的方法,從而實現了這種呼叫方式;當然如果想有引數,還可以這麼寫- (Dog *(^)(NSString *))eat3 {
return ^ (NSString *food) {
NSLog(@"吃%@", food);
return self;
};
}
- (Dog *(^)(double))run3 {
return ^ (double distance) {
NSLog(@"跑 %f米", distance);
return self;
};
}
以上寫法就可以這樣來呼叫dog.run3(500).eat3(@"骨頭").run3(1000).eat3(@"便便");
寫到這裡相信大家已經發現,masonry框架就是採用這種程式設計思想;
下面再來說說響應式編程思想,響應式程式設計就是一種面向資料流和變化傳播的程式設計正規化。就是說可以在程式語言中很方便地表達靜態或動態的資料流,而相關的計算模型會自動將變化的值通過資料流進行傳播。
說人話就是,你在view中修改資料,model中會跟著變,在model中修改資料,view顯示也跟著變,要實現這種效果,iOS開發中,要想實現這種效果,可以使用KVO,但是!蘋果的KVO會統一呼叫同一個方法,且方法固定不變,當要監聽的物件過多,十分難以管理維護;
說到這裡,答案已經明瞭,RAC之所以叫函式響應式程式設計框架,就是因為她包含了函數語言程式設計思想,和響應式程式設計思想; 好了,時間不早,洗洗睡覺,至於RAC的具體用法和實現,請期待下回分解!