ReactiveCocoa -函数式编程和响应式编程
RAC具有函数式编程和响应式编程的特性。它主要吸取了.Net的 Reactive Extensions的设计和实现。
ReactiveCocoa试图解决什么问题
ReactiveCocoa试图解决以下3个问题:
- 传统iOS开发过程中,状态以及状态之间依赖过多的问题
- 传统MVC架构的问题:Controller比较复杂,可测试性差
- 提供统一的消息传递机制
统一消息传递机制
iOS开发中,每一行代码几乎都是在相应某个事件,例如按钮的点击,收到网络消息,属性的变化(通过KVO)或者用户位置的变化(通过 CoreLocation)。但是这些事件都用不同的方式来处理,比如包括KVO、Notification、delegation、block以及target-action方式。。ReactiveCocoa为事件定义了一个标准接口,从而可以使用一些基本工具来更容易的连接、过滤和组合。使得以上各种消息传递机制都可以用RAC来完成
由于Objective-C语言的内存管理是基于引用计数 的,为了避免循环引用问题,在block中如果要引用self,需要使用@weakify(self)
和@strongify(self)
来避免强引用。另外,在使用时应该注意block的嵌套层数,不恰当的滥用多层嵌套block可能给程序的可维护性带来灾难。
参考资料:
http://www.cocoachina.com/ios/20150123/10994.html
http://www.devtang.com/blog/2014/02/11/reactivecocoa-introduction/