美文网首页
(三)、iOS RAC - RACSubjectAndRACRe

(三)、iOS RAC - RACSubjectAndRACRe

作者: Buddha_like | 来源:发表于2019-03-25 17:31 被阅读0次
/*
 RACSignal是不具备发送信号的能力的,但是RACSubject这个类就可以做到订阅/发送为一体。
 之前还提到过RAC三部曲,在RACSuject中同样适用。
 */

/*
 1.创建信号
 调用subject方法内部事创建了一个_disposable取消信号和一个数组_subscribers,这个数组从命名上就可以看出来这个数组是,用来保存订阅者。
 */
RACSubject *subject = [RACSubject subject];

//测试:先发信息,看是否能收到 : 不能
[subject sendNext:@"测试:先发信息,看是否能收到"];


RACReplaySubject *replaySubject = [RACReplaySubject subject];
[replaySubject subscribeNext:^(id  _Nullable x) {
    NSLog(@"1.RACReplaySubject:%@",x);
}];

[replaySubject sendNext:@"我先发送数据, 后订阅"];
[replaySubject subscribeNext:^(id _Nullable x) {
NSLog(@"2.RACReplaySubject:%@",x);
}];

/*
 2.订阅信号
 这里很简单,创建一个订阅者,然后调用  self subscribe:o]方法
 在RACSignal中也调用了这个方法,但是需要注意的是这两个方法并不是一个方法,内部实现不一样 -> 返回值 RACSubject
 在订阅的时候会把订阅者会把订阅者保存到一开创建RACSubject中的数组_subscribers中去。
 */
[subject subscribeNext:^(id  _Nullable x) {
    NSLog(@"%@", x);
}];

//再次订阅
[subject subscribeNext:^(id  _Nullable x) {
    NSLog(@"再次订阅:%@", x);
}];

/*
 3.发送数据
 这里很简单,创建一个订阅者,然后调用  self subscribe:o]方法
 在RACSignal中也调用了这个方法,但是需要注意的是这两个方法并不是一个方法,内部实现不一样 -> 返回值 RACSubject
 在订阅的时候会把订阅者会把订阅者保存到一开创建RACSubject中的数组_subscribers中去。
 */
 [subject sendNext:@"发送数据"];

/**
 总结 一
 @param: 1.创建的subject的是内部会创建一个数组_subscribers用来保存所有的订阅者
 @param: 2.订阅信息的时候会创建订阅者,并且保存到数组中
 @param: 3.遍历subject中_subscribers中的订阅者,依次发送信息
 */

/**
 总结二
 @param: 测试:先发信息,不能接收
 @param:订阅多次信号,然后发送数据,我们可以看到收到了两次数据。
 */

/**
 总结三 如果我非要先发送在订阅,并且也要能收到怎么处理呢?
 RACReplaySubject : 继承RACSubject,他的目的就是为例解决上面必须先订阅后发送的问题
 @param: 1 创建信号
 @param: 2.发送信号 代码中在发送之前做了一件事情,把要发送的数据保存到数组中,然后调用父类的发送方法,发送玩了看发送成功了没,成功了就删除数据,避免一个数据多次发送。
 @param:3.订阅信号
 return:1.创建的时候会在父类的基础之上多做一步,创建一个数组用来保存发送的数据,2.发送数据,但是此时发送会失败啊,为什么?因为没有人订阅啊,我发给谁啊,3.订阅信号,先遍历一次保存数据的数组,如果有就执行
 */

相关文章

网友评论

      本文标题:(三)、iOS RAC - RACSubjectAndRACRe

      本文链接:https://www.haomeiwen.com/subject/jppbvqtx.html