美文网首页
RACSingal信号类

RACSingal信号类

作者: BigBossZhu | 来源:发表于2019-12-23 09:33 被阅读0次

    RACSingal信号类.
    1. 表示当数据改变时,信号内部会发出信号.本身不具备发送能力,而是交给内部订阅者发送.
    2. 默认一个信号是冷信号,值改变不会触发.只有被订阅了才会变为热信号,值改变才会触发.
    3. 如何订阅信号:调用RACSingal的subscribeNext就能订阅.
    相关类:RACDynamicSignal,RACDisposable(block类型),RACSubscriber(协议),遵循协议的发送订阅者.

    内部实现和简单使用:

    内部实现:

      1. 创建RACDynamicSignal信号.
        内部保存了RACDisposable(block)类型的数据
      1. 调用subscribeNext订阅信号.
        2.0 创建订阅者
        2.1 内部保存了nextBlock.
        2.2 订阅信号内部方法内执行RACDisposable
        self.didSubscribe(subscriber)//源码
      1. RACSubscriber(协议)发送信号,调用sendNext
        3.0 内部调用nextBlock,nextBlock(value)//源码
        `

    其他类:RACDisposable用于取消订阅或清理资源
    默认一个信号发送数据完毕就会主动取消订阅,因为订阅者被释放了.
    只要订阅者存在就不会取消.

    代码:1. 创建,订阅,发送.(主动取消订阅,不取消订阅)

    
        //全局属性创建订阅者(主要有订阅就不会被取消)
    @property (nonatomic, strong) id <RACSubscriber> subscriber;
    
    
        //1. 创建信号
        RACSignal *singal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
            //2.x
            NSLog(@"信号被订阅");
            self->_subscriber = subscriber;
            //3. 发送信号(内部就会执行nextBlcok)
            [subscriber sendNext:@"123"];
            return [RACDisposable disposableWithBlock:^{
                NSLog(@"信号被取消");
            }];
        }];
        
        //2. 订阅信号,一调用就会执行RACDisposable
        RACDisposable *disposable = [singal subscribeNext:^(id x) {
            NSLog(@"发送数据");
        }];
        //主动取消订阅
        [disposable dispose];
    
    

    相关文章

      网友评论

          本文标题:RACSingal信号类

          本文链接:https://www.haomeiwen.com/subject/jztznctx.html