zoukankan      html  css  js  c++  java
  • ReactiveCocoa总结

    RAC三部曲,1创建信号,2订阅信号,3发送信号,

    信号类: RACSiganl

     // 1.创建信号
        RACSignal *siganl = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {


            //3.发送信号
            [subscriber sendNext:@"小四"];

           //return [RACDisposable disposableWithBlock:^{ }];取消信号订阅信号不会被触发
            return nil;
        }];

      // 2.订阅信号.
        [siganl subscribeNext:^(id x) {
            // 当有信号发出数据,就会调用block.
            NSLog(@"接收到数据:%@",x);
        }];


        1. 创建信号,racsignal保存didSubscribe这个block    2.订阅信号,订阅信号代码首先创建一个订阅信号者,保存nextBlock,并在nextBlock里面执行didSubscribe这个Block    3.发送信号 didSubscribe拿到订阅者,调用SendNext发送信号,接着调用刚刚保存的nextBlock执行里面的代码 。

         所以,如果没有订阅信号者,那么racsignal保存的didSubscribe这个Block永远不会调用,也就是说发送信号代码永远不会被执行

      RACDisposable 可以主动取消信号

    //-----------------------------------------------------------------
      RACSubject:信号提供者,自己可以充当信号,又能发送信号

      RACSubject *subject = [RACSubject subject];
        
        // 2.订阅信号
        [subject subscribeNext:^(id x) {
            NSLog(@"1订阅者%@",x);
        }];
        [subject subscribeNext:^(id x) {
            NSLog(@"2订阅者%@",x);
        }];
        
        // 3.发送信号
        [subject sendNext:@"小四"];
        
           1创建信号,创建一个subscribers数组  2订阅信号 保存nextBlock,将订阅者添加到subscribers数组中  3发送信号 遍历数组,取出订阅者,执行 nextBlock

    //-----------------------------------------------------------------
        RACReplaySubject:重复提供信号类,RACSubject的子类

     // 1.创建信号
        RACReplaySubject *replaySubject = [RACReplaySubject subject];
        
        // 3.发送信号
        [replaySubject sendNext:@1];
        [replaySubject sendNext:@2];
        
        // 2.订阅信号
        [replaySubject subscribeNext:^(id x) {
            
            NSLog(@"第一个订阅者接收到的数据%@",x);
        }];
        
        // 订阅信号
        [replaySubject subscribeNext:^(id x) {
            
            NSLog(@"第二个订阅者接收到的数据%@",x);
        }];
         1 创建信号 分别创建一个subscribers数组和valuesReceived数组 2 订阅信号 保存 nextBlock,遍历valuesReceived数组拿到刚刚创建的RACSuscriber发送数据,如果没有则不发送 4 发送信号 保存发送的数据,遍历所有的订阅者,执行nextBlock。   
        所以 可以先发送信号,再订阅信号,RACSubject就不可以。

    RACMulticastConnection

    连接信号类 不管有多少个订阅者,只想要发送一次请求

    // 1.创建连接类

    RACMulticastConnection *connection = [signal publish];

    // 2.订阅信号
    [connection.signal subscribeNext:^(id x) {

    NSLog(@"%@",x);
    }];
    [connection.signal subscribeNext:^(id x) {

    NSLog(@"%@",x);
    }];
    [connection.signal subscribeNext:^(id x) {

    NSLog(@"%@",x);
    }];

    // 3.连接:才会把源信号变成热信号
    [connection connect];

    1创建源信号,保存didSubscribe这个block 2.创建连接类,保存信号,还保存着最开始的signal
    3订阅信连接类信号创建RACSubject,保存nextBlock,将订阅者添加到subscribers数组中。4 订阅源信号,执行didSubscribe,遍历RACSubject里面所有的订阅者,取出订阅者,执行 nextBlock


     

  • 相关阅读:
    一个很好的在线测试编辑器(可以在线运行很多程序)
    基于angular的route实现单页面cnodejs
    微博
    jsonp跨域再谈
    打开IIS的快捷键
    PHPCMS笔记第二弹
    phpcms ——模板标签详细使用说明
    PHP流程管理,堪比小小程序
    PHP的简单易懂文件管理,可实现基本功能
    使用php ajax写省、市、区、三级联动
  • 原文地址:https://www.cnblogs.com/xsiOS/p/5104038.html
Copyright © 2011-2022 走看看