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
// 創建信號
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
// block調用時刻:每當有訂閱者訂閱信號,就會調用block。
// 發送信號
[subscriber sendNext:@"ws"];
// 如果不在發送數據,最好發送信號完成,內部會自動調用[RACDisposable disposable]取消訂閱信號。
[subscriber sendCompleted];
// 取消信號,如果信號想要被取消,就必須返回一個RACDisposable
// 信號什么時候被取消:1.自動取消,當一個信號的訂閱者被銷毀的時候機會自動取消訂閱,2.手動取消,
//block什么時候調用:一旦一個信號被取消訂閱就會調用
//block作用:當信號被取消時用于清空一些資源
return [RACDisposable disposableWithBlock:^{
// block調用時刻:當信號發送完成或者發送錯誤,就會自動執行這個block,取消訂閱信號。
// 執行完Block后,當前信號就不在被訂閱了。
NSLog(@"取消訂閱");
}];
}];
// 2. 訂閱信號
//subscribeNext
// 把nextBlock保存到訂閱者里面
// 只要訂閱信號就會返回一個取消訂閱信號的類
RACDisposable *disposable = [signal subscribeNext:^(id x) {
// block調用時刻:每當有信號發出數據,就會調用block.
NSLog(@"接收到數據:%@",x);
}];
// 取消訂閱
[disposable dispose];
- RACSignal總結:
一.核心:
1.核心:信號類
2.信號類的作用:只要有數據改變就會把數據包裝成信號傳遞出去
3.只要有數據改變就會有信號發出
4.數據發出,并不是信號類發出,信號類不能發送數據
一.使用方法:
1.創建信號
2.訂閱信號
二.實現思路:
1.當一個信號被訂閱,創建訂閱者,并把nextBlock保存到訂閱者里面。
2.創建的時候會返回 [RACDynamicSignal createSignal:didSubscribe];
3.調用RACDynamicSignal的didSubscribe
4.發送信號[subscriber sendNext:value];
5.拿到訂閱者的nextBlock調用
注:轉載自http://blog.csdn.net/y_csdnblog_xx/article/details/51480181