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

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

@H_403_1@ RACSignal使用步骤:

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

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

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

@H_403_1@

@H_403_1@

@H_403_1@ RACSignal底层实现:

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

@H_403_1@2.当信号被订阅,也就是调用@H_403_1@signal@H_403_1@subscribeNext:nextBlock

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

@H_403_1@2.1@H_403_1@subscribeNext内部会调用@H_403_1@siganl@H_403_1@didSubscribe

@H_403_1@3.@H_403_1@siganl@H_403_1@didSubscribe调用@H_403_1@[subscriber sendNext:@1@H_403_1@];

@H_403_1@3.1@H_403_1@sendNext底层其实就是执行@H_403_1@subscriber@H_403_1@nextBlock

@H_403_1@

[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];


@H_403_1@* RACSignal总结:

@H_403_1@一.@H_403_1@核心:

@H_403_1@ 1.核心:信号类

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

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

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

@H_403_1@一.@H_403_1@使用方法

@H_403_1@ 1.创建信号

@H_403_1@ 2.订阅信号

@H_403_1@二.@H_403_1@实现思路:

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

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

@H_403_1@ 3.调用@H_403_1@RACDynamicSignal@H_403_1@didSubscribe

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

@H_403_1@ 5.拿到订阅者的@H_403_1@nextBlock调用

猜你在找的React相关文章