美文网首页
RactiveCocoa的工作原理概括介绍

RactiveCocoa的工作原理概括介绍

作者: Sweet丶 | 来源:发表于2018-12-12 13:50 被阅读41次

为了引出MVVM + RAC在项目中实现,所以这里来先对RactiveCocoa作个概括介绍。

RactiveCocoa是函数式响应式编程思想启发下写出来的一套框架,整合了系统的各种UI响应事件、通知、代理、KVO等功能,提供了使用更方便更内聚的API,思路是通过信号的创建和订阅来完成消息传递的。下面是关于RactiveCocoa的一些简短的介绍,希望OC项目中还没有用RactiveCocoa的,赶紧用起来!

一、主要类的介绍

既然你自己去看源码或者是在项目中使用的时候,也是要了解这些类的,我就这里介绍下,帮您节省些时间。(这部分请跳读再细读)

  • RACStream是一个抽象类,定义了流的一些操作方法。框架里面主要是使用的RACStream 的子类RACSignal和RACSequence来完成操作的
  • RACSignal,信号类,框架的核心类,可以订阅这个信号来收到回调,每次订阅都会收到一次block的回调. 可以自定义创建,也可以使用框架里面提供的子类
  • RACSubscriber,订阅者类,遵守了RACSubscriber协议的对象都可以是订阅者,可以调用方法sendNext:sendError:sendComplete:, 调用后即回调对应的block。
  • RACDisposable, 订阅关系的取消和相关资源的清理, 注意不是清理信号对象。

RACSignal类的结构:


RACSignal.jpeg

RACSubscriber类的结构:


RACSubscriber本身结构.jpeg

RACDisposable类的结构:


RACDisposable.jpeg
二、工作原理

信号创建和订阅的方法介绍

// RACSignal.h文件里面提供的创建方法
+ (RACSignal *)createSignal:(RACDisposable * (^)(id<RACSubscriber> subscriber))didSubscribe;

// 信号订阅的方法
- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock error:(void (^)(NSError *error))errorBlock completed:(void (^)(void))completedBlock;

MVVM 模式下的使用例子

// 信号的创建(viewModel定义了loginSignal 信号)
self.loginSignal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
   // 省略了发送请求的代码....
    [subscriber sendNext:@(1)];
    [subscriber sendCompleted];
    return [RACDisposable disposableWithBlock:^{ }];
}];

// 信号的订阅(这里是在控制器中订阅viewModel的信)
[self.viewModel.loginSignal subscribeNext:^(NSNumber *nomoreDataStatu) {
    // do some thing
}];

通过框架源码里面的方法调用追踪
总结起来就是:

  1. 信号(RACSignal)创建时RACSignal对象保存好传入的didSubscribe这个block.
  2. 在信号被订阅时(即信号的subscribeNext:方法调用),会创建RACPassthroughSubscriber订阅者对象来保存订阅时传入的sendNextsendErrorsendComplete这个三个block,再调用didSubscribe.
  3. didSubscribe里面使用参数subscriber调用sendNext、sendError、sendCompleted这三个方法,就会分别调用订阅时传入的block(sendNextsendErrorsendComplete这个三个block)
  4. [subscriber sendCompleted];这句代码调用后,代表这一次的订阅就结束了,不会再收到回调了;要收到回调需要再次订阅这个信号。

可以跟着这个博客去详细了解:ReactiveCocoa 中 RACSignal 是如何发送信号的

三、RactiveCocoa的优点
  1. 给OC增加了元组(RACTuple)这个新的数据类型,这个在swift里面才有的数据类型
  2. 运用信号订阅这个概念,扩展出了多个信号关联、信号变换、信号压缩后再传递等实用的功能。
  3. 除MVVM + RAC的实际使用外,对于系统提供的API的整合也使得编程方便了许多。ReactiveCocoa框架里面应该要了解的几个功能
四、MVVM + RAC在项目中实现

设计模式MVVM、MVC在iOS中实现对比
demo地址:https://github.com/1ikeSmi1e/MVVM_use
下载下来后需要使用命令行之后再打开

cd xxxx下载的目录 // + 回车
pod install

参考文章
ReactiveCocoa自述:工作原理和应用
iOS 最全ReactiveCocoa原理及使用方法
最快让你上手ReactiveCocoa之进阶篇
ReactiveCocoa 中 RACSignal 是如何发送信号的
ReactiveCocoa学习笔记六-RACDisposable源码分析

相关文章

网友评论

      本文标题:RactiveCocoa的工作原理概括介绍

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