ReactiveCocoa常见类-RACSiganl-信号

【ReactiveCocoa常见类-RACSiganl-信号】ViewController.m

#import "ViewController.h"#import "ReactiveCocoa.h"@interface ViewController () @property (nonatomic, strong) id subscriber; //订阅者 @end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // 核心:信号类 // 信号类作用:只要有数据改变,就会把数据包装成一个信号,传递出去。 // 只要有数据改变,就会有信号发出。 // 数据发出,并不是信号类发出。// 1.创建信号 createSignal:didSubscribe(block) // RACDisposable:取消订阅 // RACSubscriber:发送数据// createSignal方法: // 1.创建RACDynamicSignal // 动态 // 2.把didSubscribe保存到RACDynamicSignalRACSignal *siganl = [RACSignal createSignal:^RACDisposable *(id subscriber) { // block调用时刻:当信号被订阅的时候就会调用 // block作用:描述当前信号哪些数据需要发送 // _subscriber = subscriber; // 发送数据 NSLog(@"调用了didSubscribe"); // 通常:传递数据出去 [subscriber sendNext:@1]; // 调用订阅者的nextBlock// 如果信号,想要被取消,就必须返回一个RACDisposable return [RACDisposable disposableWithBlock:^{// 信号什么时候被取消:1.自动取消,当一个信号的订阅者被销毁的时候,就会自动取消订阅 2.主动取消 // block调用时刻:一旦一个信号,被取消订阅的时候就会调用 // block作用:当信号取消订阅,用于清空一些资源 NSLog(@"取消订阅"); }]; }]; // subscribeNext: // 1.创建订阅者 // 2.把nextBlock保存到订阅者里面 // 订阅信号 // 只要订阅信号,就会返回一个取消订阅信号的类 RACDisposable *disposable = [siganl subscribeNext:^(id x) {// block:只要信号内部发送数据,就会调用这个block NSLog(@"%@",x); }]; // 取消订阅 // [disposable dispose]; // RACSignal使用步骤: // 1.创建信号// 2.订阅信号// RACSignal底层实现: // 1.当一个信号被订阅,创建订阅者,并且把nextBlock保存到订阅者里面 // 2.[RACDynamicSignal subscribe:RACSubscriber] // 3.调用RACDynamicSignal的didSubscribe // 4.[subscriber sendNext:@1]; // 5.拿到订阅者的nextBlock调用 } @end//2016-08-14 22:08:18.056 ReactiveCocoa[35989:1720465] 调用了didSubscribe //2016-08-14 22:08:18.057 ReactiveCocoa[35989:1720465] 1 //2016-08-14 22:08:18.057 ReactiveCocoa[35989:1720465] 取消订阅

    推荐阅读