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

前端之家收集整理的这篇文章主要介绍了ReactiveCocoa之RACSignal核心类的使用(三)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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调用

原文链接:https://www.f2er.com/react/305651.html

猜你在找的React相关文章