RACScheduler

来源:互联网 发布:飞狐 指标数据输出 编辑:程序博客网 时间:2024/06/06 00:05

调度器

有了信号源和订阅者,我们还需要由调度器来统一调度订阅者订阅信号源的过程中所涉及到的任务,这样才能保证所有的任务都能够合理有序地执行。

RACScheduler 在 ReactiveCocoa 中就是扮演着调度器的角色,本质上,它就是用 GCD 的串行队列来实现的,并且支持取消操作。是的,在 ReactiveCocoa 中,并没有使用到 NSOperationQueue 和 NSRunloop 等技术,RACScheduler 也只是对 GCD 的简单封装而已。

同样的,RACScheduler 的一系列功能也是通过类簇来实现的,除了用来测试的子类外,总共还有四个私有子类:

这里写图片描述
主要就是 RACTargetQueueScheduler 子类:
RACImmediateScheduler :立即执行调度的任务,这是唯一一个支持同步执行的调度器;
RACQueueScheduler :一个抽象的队列调度器,在一个 GCD 串行列队中异步调度所有任务;
RACTargetQueueScheduler :继承自 RACQueueScheduler ,在一个以一个任意的 GCD 队列为 target 的串行队列中异步调度所有任务;
RACSubscriptionScheduler :一个只用来调度订阅的调度器。
值得一提的是,在 RACScheduler 中有一个非常特殊的方法:

- (RACDisposable *)scheduleRecursiveBlock:(RACSchedulerRecursiveBlock)recursiveBlock;

它可以将递归调用转换成迭代调用,这样做的目的是为了解决深层次的递归调用可能会带来的堆栈溢出问题。

原创粉丝点击