RactiveCocoa的工作原理概括介绍

2018-12-12  本文已影响41人  Sweet丶

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

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

一、主要类的介绍

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

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源码分析

上一篇 下一篇

猜你喜欢

热点阅读