start
好,上一篇之后,我们再接再厉,继续下一篇,好好学习如何正确的使用和思考RAC中的一些基本概念。
RACScheduler
是RAC中非常重要的概念,原文的博主也说了讲了这个,才能让他的博客对的上模式这个词。
本文译自ReactiveCocoa Design Patterns。
注意:下文中,为了方便大家理解,部分单词没有翻译,当然如果需要知道中文的,相对上期,增加的部分如下:
- scheduler:调度器,词典里面的翻译是计算机里面把需要执行的作业(job)、操作(operation)组织放入到合适的队列的东西
RACScheduler
在ReactiveCocoa的signal里面传递的所有事件,都是通过框架里面一个叫做scheduler的组件去完成的,在RAC里面他的表现形式就是RACScheduler
类簇。因为这样的设计为表达同步、异步和延迟事件,以及取消已经在调度中的事件提供了方便的抽象概念。RACScheduler
通过调度block来完成对事件传送的操作,可以通过销毁通过schedule方法返回的RACDisposable
对象来去掉已经在调度中(scheduling)的block。
RACScheduler
是一个类簇,下面还有更为具体的scheduler:
RACImmediateScheduler
RAC内部使用的一个私有scheduler,只支持同步的调度。使用时只是简单的立即执行block,延迟调度工作可以使用-[NSThread sleepUntilDate:]
来阻塞当前线程,显然没有任何方法可以阻止scheduler的执行,所以销毁RACDisposable
对象什么都不会发生(实际上他的schedule方法返回的是一个nil)。
RACQueueScheduler
这个用的是GCD里面的队列来实现block的schedule,他只是基于GCD的发布(dispatching)block和队列进行了简单的封装,如果你知道GCD是怎么做的,那么你也就知道他是怎么做的了。
RACSubscriptionScheduler
另一个框架内部使用的scheduler,他转发当前的调度到当前的线程(scheduler可以和线程关联),如果当前线程不存在的话,那么会转发到默认的后台线程队列执行。
接口
Scheduler方法是这样子的:
1 | - (RACDisposable *)schedule:(void (^)(void))block; |
通过block创建调度的方法像这样:
1 | RACDisposable *disposable = [[RACScheduler mainThreadScheduler] afterDelay:5.0 schedule:^{ |
end
这一篇的内容超精简,不过讲的内容也不多,但是在RAC里面确是非常重要的一个概念。
现在发出来的这三篇主要是讲RAC框架里面提供的基础工具的,接下来还有一篇是flattenMap相关概念的,这三篇之后,就会开始讲到真正的RAC设计模式的相关内容了,其中最为主要的就是MVVM模式了,敬请期待。
最后欢迎大家订阅我的微信公众号 Little Code
- 公众号主要发一些开发相关的技术文章
- 谈谈自己对技术的理解,经验
- 也许会谈谈人生的感悟
- 本人不是很高产,但是力求保证质量和原创