加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ReactiveCocoa之RACSignal核心类的使用(三)

发布时间:2020-12-15 08:22:54 所属栏目:百科 来源:网络整理
导读:RACSignal 使用步骤: 1. 创建信号 + (RACSignal *)createSignal:(RACDisposable * (^)( id RACSubscriber subscriber))didSubscribe 2. 订阅信号 , 才会激活信号 . - (RACDisposable *)subscribeNext:( void (^)( id x))nextBlock 3. 发送信号 - ( void )se

RACSignal使用步骤:

1.创建信号+ (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe

2.订阅信号,才会激活信号. - (RACDisposable *)subscribeNext:(void(^)(idx))nextBlock

3.发送信号- (void)sendNext:(id)value

RACSignal底层实现:

1.创建信号,首先把didSubscribe保存到信号中,还不会触发。

2.当信号被订阅,也就是调用signalsubscribeNext:nextBlock

2.2subscribeNext内部会创建订阅者subscriber,并且把nextBlock保存到subscriber中。

2.1subscribeNext内部会调用siganldidSubscribe

3.siganldidSubscribe中调用[subscriber sendNext:@1];

3.1sendNext底层其实就是执行subscribernextBlock

[objc] view plain copy
  1. //创建信号
  2. RACSignal*signal=[RACSignalcreateSignal:^RACDisposable*(id<RACSubscriber>subscriber){
  3. //block调用时刻:每当有订阅者订阅信号,就会调用block。
  4. //发送信号
  5. [subscribersendNext:@"ws"];
  6. //如果不在发送数据,最好发送信号完成,内部会自动调用[RACDisposabledisposable]取消订阅信号。
  7. sendCompleted];
  8. //取消信号,如果信号想要被取消,就必须返回一个RACDisposable
  9. //信号什么时候被取消:1.自动取消,当一个信号的订阅者被销毁的时候机会自动取消订阅,2.手动取消,
  10. //block什么时候调用:一旦一个信号被取消订阅就会调用
  11. //block作用:当信号被取消时用于清空一些资源
  12. return[RACDisposabledisposableWithBlock:^{
  13. //block调用时刻:当信号发送完成或者发送错误,就会自动执行这个block,取消订阅信号。
  14. //执行完Block后,当前信号就不在被订阅了。
  15. NSLog(@"取消订阅");
  16. }];
  17. }];
  18. //2.订阅信号
  19. //subscribeNext
  20. //把nextBlock保存到订阅者里面
  21. //只要订阅信号就会返回一个取消订阅信号的类
  22. RACDisposable*disposable=[signalsubscribeNext:^(idx){
  23. //block调用时刻:每当有信号发出数据,就会调用block.
  24. NSLog(@"接收到数据:%@",x);
  25. //取消订阅
  26. [disposabledispose];


* RACSignal总结:

.核心:

1.核心:信号类

2.信号类的作用:只要有数据改变就会把数据包装成信号传递出去

3.只要有数据改变就会有信号发出

4.数据发出,并不是信号类发出,信号类不能发送数据

.使用方法:

1.创建信号

2.订阅信号

.实现思路:

1.当一个信号被订阅,创建订阅者,并把nextBlock保存到订阅者里面。

2.创建的时候会返回[RACDynamicSignal createSignal:didSubscribe];

3.调用RACDynamicSignaldidSubscribe

4.发送信号[subscriber sendNext:value];

5.拿到订阅者的nextBlock调用

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读