ViewController.m
#import "ViewController.h"
#import "ReactiveCocoa.h"
@interface ViewController ()
@property (nonatomic, strong) id subscriber; //訂閱者
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 核心:信號(hào)類
// 信號(hào)類作用:只要有數(shù)據(jù)改變,就會(huì)把數(shù)據(jù)包裝成一個(gè)信號(hào),傳遞出去。
// 只要有數(shù)據(jù)改變,就會(huì)有信號(hào)發(fā)出。
// 數(shù)據(jù)發(fā)出,并不是信號(hào)類發(fā)出。
// 1.創(chuàng)建信號(hào) createSignal:didSubscribe(block)
// RACDisposable:取消訂閱
// RACSubscriber:發(fā)送數(shù)據(jù)
// createSignal方法:
// 1.創(chuàng)建RACDynamicSignal // 動(dòng)態(tài)
// 2.把didSubscribe保存到RACDynamicSignal
RACSignal *siganl = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
// block調(diào)用時(shí)刻:當(dāng)信號(hào)被訂閱的時(shí)候就會(huì)調(diào)用
// block作用:描述當(dāng)前信號(hào)哪些數(shù)據(jù)需要發(fā)送
// _subscriber = subscriber;
// 發(fā)送數(shù)據(jù)
NSLog(@"調(diào)用了didSubscribe");
// 通常:傳遞數(shù)據(jù)出去
[subscriber sendNext:@1];
// 調(diào)用訂閱者的nextBlock
// 如果信號(hào),想要被取消,就必須返回一個(gè)RACDisposable
return [RACDisposable disposableWithBlock:^{
// 信號(hào)什么時(shí)候被取消:1.自動(dòng)取消,當(dāng)一個(gè)信號(hào)的訂閱者被銷毀的時(shí)候,就會(huì)自動(dòng)取消訂閱 2.主動(dòng)取消
// block調(diào)用時(shí)刻:一旦一個(gè)信號(hào),被取消訂閱的時(shí)候就會(huì)調(diào)用
// block作用:當(dāng)信號(hào)取消訂閱,用于清空一些資源
NSLog(@"取消訂閱");
}];
}];
// subscribeNext:
// 1.創(chuàng)建訂閱者
// 2.把nextBlock保存到訂閱者里面
// 訂閱信號(hào)
// 只要訂閱信號(hào),就會(huì)返回一個(gè)取消訂閱信號(hào)的類
RACDisposable *disposable = [siganl subscribeNext:^(id x) {
// block:只要信號(hào)內(nèi)部發(fā)送數(shù)據(jù),就會(huì)調(diào)用這個(gè)block
NSLog(@"%@",x);
}];
// 取消訂閱
// [disposable dispose];
// RACSignal使用步驟:
// 1.創(chuàng)建信號(hào)
// 2.訂閱信號(hào)
// RACSignal底層實(shí)現(xiàn):
// 1.當(dāng)一個(gè)信號(hào)被訂閱,創(chuàng)建訂閱者,并且把nextBlock保存到訂閱者里面
// 2.[RACDynamicSignal subscribe:RACSubscriber]
// 3.調(diào)用RACDynamicSignal的didSubscribe
// 4.[subscriber sendNext:@1];
// 5.拿到訂閱者的nextBlock調(diào)用
}
@end
//2016-08-14 22:08:18.056 ReactiveCocoa[35989:1720465] 調(diào)用了didSubscribe
//2016-08-14 22:08:18.057 ReactiveCocoa[35989:1720465] 1
//2016-08-14 22:08:18.057 ReactiveCocoa[35989:1720465] 取消訂閱