ReactiveObjc框架之类

本章我们来看下ReactiveObjc的类设计。

信号相关

我们先来看下ReactiveObjc关于信号的类设计。


image.png

RACStream

RACStream是一个抽象类。提供了抽象方法,操作方法,debug能力。我们可以看到作者使用category聚合功能。
为啥有些方法必须子类重写? 有些不用?

  • 抽象方法(必须由子类重写)
  • Debug
  • operation方法
image.png

RACSignal

RACSignal继承RACStream。实现了信号创建,订阅功能。信号和订阅是一一对应关系。

  • 重写了RACStream的抽象方法。
  • 继承了RACStream的Debug和Operation方法。
  • 新增了信号的创建方法。
  • 新增主动触发
  • 新增信号订阅
  • 新增Debug方法
  • 新增Test方法

RACSignal的子类

RACChannelTerminal
重写了RACSubscriber的send方法转发给内部持有一个otherTerminal,主要就实现了A信号发送到B信号的订阅。这个类主要是为RACChannel服务的。
RACChannel是RAC里面通道的概念,主要是实现A信号发送消息给B信号,B信号发送数据给A信号。是一个双向绑定的概念。
RACDynamicSignal
默认创建信号内部都是转发给这个信号类。这个类主要是重写了订阅的方法。
RACEmptySignal
空信号,不会关联Signal,订阅就直接发送sendCompleted
RACErrorSignal
Error信号,不会关联Signa,订阅直接发送error
RACReturnSignal
renturn信号,包装NSObject->Signal,订阅直接发送NSObject被包装的值,同事发送sendCompleted
RACSubject
主题信号,通过重写订阅,发送。 支持一个主题重复订阅。

RACSequence

RACSequence继承RACStream

订阅相关

RAC订阅主要是通过RACSubscriber 和 RACSignal配合来实现的。
RACSignal接收订阅,内部创建RACSubscriber实例,被回调给RACSignal创建的block。

回收相关

RAC订阅的回收或者说订阅动作的取消,都是用过RACDisposable及其子类来完成的。
我们先来看下RACDisposable的类图。


image.png

RACDisposable
订阅回收的基类,本身类非常简单。主要是挂载block。保存disposed状态。
RACCompoundDisposable
组合订阅回收类。 主要处理同事取消多个动作。重写了Disposable方法。
RACKVOTrampoline
建立KVO连接,处理KVO类的Disposable,重写Disposable,移除KVO观察者。
RACScopedDisposable
重写dealloc,内部调用Disposable。
RACSerialDisposable

RACMulticastConnection 捕获多订阅,内部通过RACReplaySubject实现。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 13,585评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 9,752评论 1 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 126,888评论 2 7