美文网首页RAC快速入门
RAC Day1 信号创建到订阅的过程

RAC Day1 信号创建到订阅的过程

作者: 帅气的阿斌 | 来源:发表于2020-10-15 13:44 被阅读0次

一、RAC基础知识及使用

1.继承关系


RAC类继承关系

2.基本使用

  • 创建一个基本信号
//    ^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber)
//    回调block:返回值为 RACDisposable 类型,传入参数为subscriber(遵循RACSubscriber协议)
//===》原方法声明如下
//    + (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe {
//    sendCompleted 告诉订阅者该信号此次数据发送完毕(以此来执行下一个订阅的信号)

    //创建一个基本的信号
    RACSignal *racignl = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        
        [subscriber sendNext:@"map1"];
        [subscriber sendNext:@"map2"];
        [subscriber sendCompleted];
        
        return [RACDisposable disposableWithBlock:^{//信号disposable则会被调用
            ;
        }];
    }];

    //简单的信号订阅以及取消订阅
    RACDisposable *disposable = [racignl subscribeNext:^(id  _Nullable x) {//信号每被subscribeNext一次 createSignal:后的block都会被执行一次,即值会全部再发送一遍
        NSLog(@"%@", x);
    }];
    [disposable dispose];//取消订阅

做了什么?
RACSignal调用createSignal方法
=>
RACDynamicSignal调用createSignal方法
=>
创建RACDynamicSignal对象,并持有subscriber这个block

  • 信号订阅
    后面要做什么?(既然持有了这个block,那么这个block什么时候调用呢 ?)
    [racignl subscribeNext:^(id  _Nullable x) {
        ;//code
    } error:^(NSError * _Nullable error) {
        ;//code
    } completed:^{
        ;//code
    }];

RACSignal调用subscribeNext
=>
RACSubscriber调用subscriberWithNext
=>
创建RACSubscriber对象,并持有传入的所有block
再调用RACDynamicSignalsubscribe方法,传入的参数是创建的RACSubscriber对象
RACDynamicSignalsubscribe方法做了什么
创建RACCompoundDisposableRACPassthroughSubscriber对象
注:RACPassthroughSubscriber:持有RACSignalRACSubscriberRACCompoundDisposable
RACCompoundDisposable:订阅的销毁对象
这两个对象创建完成后

    if (self.didSubscribe != NULL) {
        RACDisposable *schedulingDisposable = [RACScheduler.subscriptionScheduler schedule:^{
            RACDisposable *innerDisposable = self.didSubscribe(subscriber);
            [disposable addDisposable:innerDisposable];
        }];

        [disposable addDisposable:schedulingDisposable];
    }

self.didSubscribe(subscriber);则调用了subscriber这个block

        [subscriber sendNext:@"map1"];
        [subscriber sendNext:@"map2"];
        [subscriber sendCompleted];

至此就是信号创建到订阅的大概过程
参考:https://www.jianshu.com/p/d7d951a99db8

相关文章

  • RAC Day1 信号创建到订阅的过程

    一、RAC基础知识及使用 1.继承关系 2.基本使用 创建一个基本信号 做了什么?RACSignal调用creat...

  • 01-ReactiveObjC使用记录

    RAC 的核心思想:创建信号 - 订阅信号 - 发送信号 ,并且在 RAC 中我们会看到大量的 block RAC...

  • RAC学习之二

    RACSignal(信号)介绍: 核心思想:创建信号、订阅信号、发送信号 1、创建信号及发送信号 类方法创建RAC...

  • iOS-RAC综述

    上一篇我们探索了RAC的核心流程就是: 创建信号 订阅信号 订阅者发送信号 销毁 那么我们根据这些操作来看看RAC...

  • ReactiveCocoa函数响应式编程-应用篇

    使用RAC其实就是一个创建信号订阅信号的过程。上篇ReactiveCocoa函数响应式编程-基础篇,主要简单介绍了...

  • RAC基本用法

    1.信号的创建、订阅和发送 1.1创建信号 1.2 订阅信号 1.3 合并到一块的写法 2.RAC信号的监听 2....

  • rac 事件概述及处理

    概述:想要知道rac就必须知道rac中的三个要点 创建信号、发送信号、订阅信号。 reactive事件 reac...

  • RAC使用

    RAC使用 不介绍RAC是啥了,直接上干货 基础用法 创建信号及发送内容 订阅信号 如果只关注单个或者部分,也可以...

  • ReactiveCocoa深入理解

    信号signal是RAC的绝对核心,所有的操作都是围绕着信号来处理的。比如:创建信号,订阅信号,发送信号是消息发送...

  • 史上最全ReactiveCocoa(RAC)之信号类源码解析

    信号signal是RAC的绝对核心,所有的操作都是围绕着信号来处理的。比如:创建信号,订阅信号,发送信号是消息发送...

网友评论

    本文标题:RAC Day1 信号创建到订阅的过程

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