RACSignal
可以将RACSignal创建的对象传递至其他地方接收消息
//1.创建信号量
RACSignal * rac = [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
//2.发出消息
[subscriber sendNext:@"RAC发出的消息"];
return nil;
//需要注意的是 如果有多个订阅者 需要在这里加一个replay 否则不同订阅者收到的不是同一条消息
}] replay];
//3.订阅消息
[rac subscribeNext:^(id x) {
NSLog(@"打印收到的消息___%@",x);
}];
RACSubject
可以代替代理和block进行反向传值
TwoVC * vc = [[TwoVC alloc]init];
//创建信号量
vc.delegateSignal = [RACSubject subject];
//订阅信号
[vc.delegateSignal subscribeNext:^(id x) {
NSLog(@"打印反向传回的信号__%@",x);
}];
//RACSubject 可以有多个订阅者接收消息
[vc.delegateSignal subscribeNext:^(id x) {
NSLog(@"打印第二个订阅者收到的消息__%@",x);
}];
[self presentViewController:vc animated:YES completion:nil];
在TwoVC中发送消息
[_delegateSignal sendNext:@"RAC反向发出的信息"];
需要注意的是 RACSubject 只能先订阅 再发送消息
RACReplaySubject
RACReplaySubject 可以解决 RACSubject 必须先订阅后发送的问题
RACReplaySubject * replaySubject = [RACReplaySubject subject];
[replaySubject sendNext:@"RACReplaySubject先发送信息了,等待你的接收"];
[replaySubject subscribeNext:^(id x) {
NSLog(@"打印等待接收的信息__%@",x);
}];