学习RAC时总结的知识点,方便以后复习。想学习的童鞋可以直接翻到最后的“传送门”。
原创文章,欢迎转载.转载请注明出处: https://www.jianshu.com/p/68b594435c66
RACSignal
- 三种事件类型:next、error和completed。在因error或者completed事件终止之前可以无限次的发送next事件。
- 支持的操作:filter(过滤)、map(类型转换)、flattenMap(获取信号中的信号)、doNext(附加操作)、then(传递控制权)、deliverOn(操作线程)、subscribeOn(指定scheduler)、throttle(节流)等。RACSignal的每个操作都会返回一个RACSignal(连贯接口fluent interface),有利于我们直接构建管道(不用每一步都使用中间变量)。
- 聚合信号:RACSignal支持将N个信号聚合成一个新的信号,当N个信号中的任何一个信号发生变化时,都会聚合生成新的信号。
- 内存管理:RAC自己持有全局的所有信号(RACSignal实例)。如果一个信号有一个或多个订阅者,那这个信号就是活跃的,不能被销毁。如果所有的订阅者都被移除了,那么这个信号就可以被销毁了(这些工作RAC已经在幕后做了,你并不需要太多关注信号的内存管理)。
RAC宏
利用RAC宏可以直接把信号的输出赋值到对象的属性上。ARC宏有两个参数,第一个参数是对象,第二个参数是对象的属性名。
RACDisposable
RACSignal的订阅方法会返回一个RACDisposable实例,你可以通过该实例的dispose方法移除订阅。
注意:如果你创建了一个管道,并且没有订阅它,那么这个管道的操作就不会被执行。
循环引用
通常情况下,信号方法的block实参中出现self时,会造成循环引用。为了更优雅(相对于__weak的方式)的避免循环引用,RAC框架包含了一个语法糖(@weakify 和 @strongify,该语句是在Extended Objective-C库中定义的宏,也被包含在RAC中)。@weakify宏让你创建一个弱引用的影子对象(如果你需要多个弱引用,你可以传入多个变量),@strongify让你创建一个对之前传入@weakify对象的强引用。
注意:如果有兴趣了解@weakify和@strongify实际上做了什么,在Xcode中,首先选中一个file,然后选择 Product -> Perform Action -> Preprocess "file"。这会对file进行预处理,展开所有的宏,以便你能看到最终的输出。
传送门:
RAC教程(上篇)
翻译自:ReactiveCocoa Tutorial – The Definitive Introduction: Part 1/2
ReactiveCocoa入门教程——第二部分
翻译自:ReactiveCocoa Tutorial – The Definitive Introduction: Part 2/2
网友评论