15.ReactiveCocoa
ReactiveCocoa簡介
ReactiveCocoa(簡稱為RAC),是由Github開源的一個應用於iOS和OS開發的新框架,Cocoa是蘋果整套框架的簡稱,因此很多蘋果框架喜歡以Cocoa結尾。
響應式程式設計思想
響應式程式設計思想:不需要考慮呼叫順序,只需要知道考慮結果,類似於蝴蝶效應,產生一個事件,會影響很多東西,這些事件像流一樣的傳播出去,然後影響結果,借用物件導向的一句話,萬物皆是流。
代表:KVO
學習 RAC 我們首先要了解 RAC 都有哪些類
RACSignal
RACSubject
RACSequence
RACMulticastConnection
RACCommand
匯入ReactiveCocoa
ReactiveCocoa的GitHub地址
Objective-C
ReactiveCocoa 2.5版本以後改用了Swift,所以Objective-C專案需要匯入2.5版本
CocoaPods整合:
platform :ios, '8.0'
target 'YouProjectName' do
use_frameworks!
pod 'ReactiveCocoa', '~> 2.5'
end
PS:新版本的CocoaPods需要加入
target 'YouProjectName' do
...
end
ReactiveCocoa常見類
RACSiganl 訊號類
訊號類,一般表示將來有資料傳遞,只要有資料改變,訊號內部接收到資料,就會馬上發出資料。
注意:
訊號類(RACSiganl),只是表示當資料改變時,訊號內部會發出資料,它本身不具備傳送訊號的能力,而是交給內部一個訂閱者去發出。
預設一個訊號都是冷訊號,也就是值改變了,也不會觸發,只有訂閱了這個訊號,這個訊號才會變為熱訊號,值改變了才會觸發。
如何訂閱訊號:呼叫訊號RACSignal的subscribeNext就能訂閱
使用:
// RACSignal使用步驟:
// 1.建立訊號 + (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe
// 2.訂閱訊號,才會啟用訊號. - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock
// 3.傳送訊號 - (void)sendNext:(id)value
// RACSignal底層實現:
// 1.建立訊號,首先把didSubscribe儲存到訊號中,還不會觸發。
// 2.當訊號被訂閱,也就是呼叫signal的subscribeNext:nextBlock
// 2.2 subscribeNext內部會建立訂閱者subscriber,並且把nextBlock儲存到subscriber中。
// 2.1 subscribeNext內部會呼叫siganl的didSubscribe
// 3.siganl的didSubscribe中呼叫[subscriber sendNext:@1];
// 3.1 sendNext底層其實就是執行subscriber的nextBlock
// 1.建立訊號
RACSignal *siganl = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
// block呼叫時刻:每當有訂閱者訂閱訊號,就會呼叫block。
// 2.傳送訊號
[subscriber sendNext:@1];
// 如果不在傳送資料,最好傳送訊號完成,內部會自動呼叫[RACDisposable disposable]取消訂閱訊號。
[subscriber sendCompleted];
return [RACDisposable disposableWithBlock:^{
// block呼叫時刻:當訊號傳送完成或者傳送錯誤,就會自動執行這個block,取消訂閱訊號。
// 執行完Block後,當前訊號就不在被訂閱了。
NSLog(@"訊號被銷燬");
}];
}];
// 3.訂閱訊號,才會啟用訊號.
[siganl subscribeNext:^(id x) {
// block呼叫時刻:每當有訊號發出資料,就會呼叫block.
NSLog(@"接收到資料:%@",x);
}];
https://blog.csdn.net/wzc10101415/article/details/55051339