本文介绍的是史上最牛叉的ios开发新框架之一,最大的特点就是:直观和灵活。直观的代码容易编写、阅读和维护,灵活的特性便于应对变态的需求,当然最重要的还是高效。各路大神(阳神,喵神,唐神等等)都不吝啬对它的赞美之词,而且该框架已被美团等广泛使用,好用的不要不要的..。本文主要介绍本人在学习ReactiveCocoa的时候的学习过程以及对一些学习资料的总结,欢迎大家批评发炎。闲话不多吹下面进入正题。
什么是ReactiveCocoa?
ReactiveCocoa(其简称为RAC)是由Github开源的一个应用于iOS和OS X开发的新框架。RAC具有函数式编程和响应式编程的特性。
是在iOS平台上对FRP的实现。FRP的核心是信号,信号在ReactiveCocoa(以下简称RAC)中是通过RACSignal来表示的,信号是数据流,可以被绑定和传递。它主要吸取了.Net的Reactive Extensions的设计和实现。
大神leezhong在博客中提到的比喻,可以更好地帮我们理解ReactiveCocoa.
可以把信号想象成水龙头,只不过里面不是水,而是玻璃球(value),直径跟水管的内径一样,这样就能保证玻璃球是依次排列,不会出现并排的情况(数据都是线性处理的,不会出现并发情况)。水龙头的开关默认是关的,除非有了接收方(subscriber),才会打开。这样只要有新的玻璃球进来,就会自动传送给接收方。可以在水龙头上加一个过滤嘴(filter),不符合的不让通过,也可以加一个改动装置,把球改变成符合自己的需求(map)。也可以把多个水龙头合并成一个新的水龙头(combineLatest:reduce:),这样只要其中的一个水龙头有玻璃球出来,这个新合并的水龙头就会得到这个球。
为什么要用ReactiveCocoa
Native app有很大一部分的时间是在等待事件发生,然后响应事件,比如等待网络请求完成,等待用户的操作,等待某些状态值的改变等等,等这些事件发生后,再做进一步处理。 但是这些等待和响应,并没有一个统一的处理方式。Delegate,Notification,Block,KVO,常常会不知道该用哪个最合适。有时需要chain或者compose某几个事件,就需要多个状态变量,而状态变量一多,复杂度也就上来了。为了解决这些问题,Github的工程师们开发了ReactiveCocoa。
其实用简单的一句话来说就是: RAC统一了对KVO、UI Event、Network request、Async work的处理,因为它们本质上都是值的变化(Values over time)。
ReactiveCocoa试图解决什么问题呢
大神唐巧在他博客中这样写道主要解决三个问题:
1.传统iOS开发过程中,状态以及状态之间依赖过多的问题。
2.传统MVC架构的问题:Controller比较复杂,可测试性差
3.提供统一的消息传递机制
详情请查看大神博文在此就不再赘述
那么问题来了?如何学习ReactiveCocoa呢
网上教程很多,本人只是做了一下总结,又初级到高级所需要看的一些文章。
初级 教程
对一个新手来说需要掌握最基本的API的使用。必看的一篇文章是RayWenderlich网站提供的系列教程,其详细程度非常牛逼。当然国内大神们早就对该教程进行翻译了 小伙伴们轻松了!!
第一部分地址:ReactiveCocoa入门教程——第一部分
第一部分地址:@L_403_14@
进阶教程
进阶教程主要是进一步分析框架的结构以及实现原理。
参考资料:
1.ReactiveCocoa github上的readme的中文翻译
2.介绍ReactiveCocoa框架的每个组件的文章,对熟悉ReactiveCocoa API非常有帮助
3.美团网官方博客之RACSignal的Subscription深入分析
4.cocoaChina文章-Reactive Cocoa详解
5.cocoaChina文章-ReactiveCocoa2实战
6.cocoaChina文章-说说ReactiveCocoa 2
7.NSHipster上的文章-ReactiveCocoa
8.@L_404_23@
9.国外牛人的一篇文章-Getting Started with ReactiveCocoa
10.NSHipster上一篇关于Recative cocoa的介绍-ReactiveCocoa
11.cocoaChina文章-【长篇高能】ReactiveCocoa 和 MVVM 入门
12.ReactiveCocoa常用语法-这样好用的ReactiveCocoa,根本停不下来
书籍
当然如果你比较豪,想买点书看看可以选择这个–《Functional Reactive Programming on iOS》
源码
1.使用ReactiveCocoa框架编写的app源码之《MVVM-IOS-Example》
2.使用ReactiveCocoa框架编写的app源码之《GroceryList》
3.使用ReactiveCocoa框架编写的app源码之《C-41》