最近在断断续续的学习RAC,差不多两个月的时间,学了120个小时左右。不得不说RAC的学习曲线十分陡峭,造成RAC难学的主要有几点原因:
- 完全不同的编程思想。平常我们使用OC写代码都是面向对象的编程范式,而RAC却是在OC语言环境下实现的函数式响应编程,简称FRP。这就需要我们使用全新的思维去组织代码架构。
- 需要学习的方法较多。不像其他框架,我们只需要使用几个常用的方法就可以用的很好,RAC几乎需要掌握全部的方法,因为在不同的场景你需要灵活组合运用这些函数。
- 传统的iOS编程,对于网络请求和响应,点击事件,通知,KVO,代理这些异步事件都是分开处理,而RAC使用信号来统一包装处理。这又是一种全新的思想,需要我们掌握和理解。
- 就算把上面的全都理解了,但是对于怎么在项目中运用RAC才是最大的难点,因为RAC太抽象,新手完全不知道从哪里下手开始。就算用RAC写项目,也会写的四不像。
我建议学习iOS的同学都可以学习下RAC,这是一种全新的编程思想(函数式响应编程),理解透彻了,可以运用在任何语言。其实其他语言都有对应的函数式编程框架,比如JS的RxJs,Java的RxJava等等,基本上流行的语言都有对应的Rx库。
前期学习RAC的时候,我花了大量的精力去搜集资料,然后筛选,在慢慢看。因为像RAC这种新的知识,只能通过搜集网上的文章来学习,好的书籍基本上没看到。
这篇博客主要是把自己在学习RAC过程中的搜集到资料整理出来,从初级到高级,还有对应的开源项目,让你在学习RAC的过程中不至于像我一样到处搜集然后筛选资料,浪费时间。
什么是函数式响应编程范式
我们在学习一个知识点之前,不能仅仅学会如何使用,而是要知道这个知识点的来龙去脉,它能解决什么痛点,有哪些优缺点,能不能解决你现在工作或者学习中遇到的问题,然后再决定是否需要花时间系统的学习。
如果决定学习,就需要系统性并且深入的学习,不能满足于从网上copy几段代码然后运用在项目里面,就大言不惭的在简历上写上精通RAC。
我们学习一个框架,是要学习他的思想,而不是学会使用几个API就完结了事,然后又就去追求新的知识。学习不是追求最新的技术潮流,然后在简历上写上精通xxx,而是需要沉下心去研究,不然到最后只会丧失初心,越来越浮躁。
废话扯得有点多了,下面进入正题。
开头我就说过RAC是函数式响应编程框架,这里包括两个编程范式:函数式和响应式。下面这些资料可以帮助你了解
RAC解决了什么问题
我们要开始学习一个新框架之前,肯定需要做个背景调查:这个新框架能解决现有环境下的哪些编程痛点,是否值得我花精力去学习?
那么下面几篇文章会给你一个答案
对RAC的感性认识
因为RAC使用的是一种全新的方式来实现我们日常的iOS编程中遇到的问题:
- 包括过多的状态依赖
- 实现方式各异的消息传递机制(通知,代理,target-action)
- MVC框架中的controller层过于臃肿。
下面这几篇文章看完,相信你对RAC对于前两个问题的优雅处理会有所体会,至于第三个问题,我们稍后再议。
RAC常用命令
看了上面两篇文章,相信你对RAC已经感兴趣了吧,至少我觉得RAC对于传统iOS编程的前两个痛点的解决方式非常优雅。
下面我们就要进行深入学习了,第一步就是要了解RAC的各种常用命令的作用,虽然RAC的注释写的非常详细,但是有的时候还是看的云里雾里,毕竟太过抽象,还是直接通过代码演示每个命令的用途来的更加直接。
下面的文档你可以当做字典,遇到不懂就可以来查询下。
RAC+MVVM讲解
相信我,如果你用过RAC+MVVM,你会爱上他们的组合的
- 【长篇高能】ReactiveCocoa 和 MVVM 入门
- iOS开发之ReactiveCocoa下的MVVM
- ReactiveCocoa2实战
- iOS 7最佳实践:一个天气App案例(上)
- iOS 7最佳实践:一个天气App案例(下)
- MVVM 介绍
开源项目
把上面这些看完,你基本上能在自己的项目中小范围使用RAC了,但是也仅限于使用下RAC的一些API写一写小功能,离真正理解RAC的思想还差得远了。
这个时候你就需要阅读大量开源的RAC项目来提高了,下面的项目会帮到你
感慨
终于在11.1号到来的前半个小时写完了,果然deadline才是最佳生产力呀。
这篇真正意义来说不算是一篇博客,算是一个资源收集贴,水了一把,不过也写了我两个半小时。
好困,(~﹃~)~zZ