• ReactiveCocoa(I)


    ReactiveCocoa常见类

    1. RAC中最核心的类RACSiganl:

    RACSiganl:信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出数据

    解析:

    • 信号类(RACSiganl),只是表示当数据改变时,信号内部会发出数据,它本身不具备发送信号的能力,而是交给内部一个订阅者去发出。

    • 默认一个信号都是冷信号,也就是值改变了,也不会触发,只有订阅了这个信号,这个信号才会变为热信号,值改变了才会触发。

    • 如何订阅信号:调用信号RACSignal的subscribeNext就能订阅。

     1 //    创建信号,首先把didSubscribe保存到信号中,还不会触发
     2     + (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe
     3     
     4 //    订阅信号,才会激活信号
     5     - (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock
     6     
     7 //    当信号被订阅,也就是调用signal的subscribeNext:nextBlock
     8 //    subscribeNext内部会创建订阅者subscriber,并且把nextBlock保存到subscriber中
     9 //    subscribeNext内部会调用siganl的didSubscribe
    10     
    11     
    12 //    发送信号
    13     - (void)sendNext:(id)value
    14     
    15 //    siganl的didSubscribe中调用[subscriber sendNext:@1];
    16 //    sendNext底层其实就是执行subscriber的nextBlock

     Demo:

     1  RACSignal *siganl = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
     2         // block调用时刻:每当有订阅者订阅信号,就会调用block。
     3         // 2.发送信号
     4         [subscriber sendNext:@1];
     5         // 如果不在发送数据,最好发送信号完成,内部会自动调用[RACDisposable disposable]取消订阅信号。
     6         [subscriber sendCompleted];
     7         
     8         return [RACDisposable disposableWithBlock:^{
     9             // block调用时刻:当信号发送完成或者发送错误,就会自动执行这个block,取消订阅信号。
    10             // 执行完Block后,当前信号就不在被订阅了。
    11             
    12             NSLog(@"信号被销毁");
    13             
    14         }];
    15     }];
    16     
    17     // 3.订阅信号,才会激活信号.
    18     [siganl subscribeNext:^(id x) {
    19         // block调用时刻:每当有信号发出数据,就会调用block.
    20         NSLog(@"接收到数据:%@",x);
    21     }];
    View Code

    打印结果:

    2. RACSubscriber

    表示订阅者的意思,用于发送信号,这是一个协议,不是一个类,只要遵守这个协议,并且实现方法才能成为订阅者。通过create创建的信号,都有一个订阅者,帮助他发送数据。

    3.RACDisposable

    用于取消订阅或者清理资源,当信号发送完成或者发送错误的时候,就会自动触发它。 

    • 使用场景:不想监听某个信号时,可以通过它主动取消订阅信号。

    4.RACSubject

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

    • 使用场景:通常用来代替代理,有了它,就不必要定义代理了。

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

    • RACReplaySubjectRACSubject区别:

      • RACReplaySubject可以先发送信号,在订阅信号,RACSubject就不可以。
    • 使用场景一:如果一个信号每被订阅一次,就需要把之前的值重复发送一遍,使用重复提供信号类。

    • 使用场景二:可以设置capacity数量来限制缓存的value的数量,即只缓充最新的几个值。

    https://www.jianshu.com/p/87ef6720a096

  • 相关阅读:
    SQL Server中六种数据移动的方法
    SQL Server数据导入导出技术概述与比较
    深入浅出SQL之左连接、右连接和全连接
    安装SQL server提示安装不上,挂起之类
    如何在SQL Server中快速删除重复记录
    SQL Server数据导入导出工具BCP详解
    深入浅出SQL教程之嵌套SELECT语句
    使用osql执行sql脚本
    sql server 分组统计
    php常用几种设计模式的应用场景
  • 原文地址:https://www.cnblogs.com/EchoHG/p/8313844.html
Copyright © 2020-2023  润新知