前言
最近北京在下大雨,所以最近写文章的步伐收到了些许的阻挠,让有些朋友久等了。那么问题来了,北京下大雨关我写文章几毛钱的事情呢??答案就是,我写文章的时间都浪费在蹲屋里铲水了,穷人一族的心酸,伤不起啊,so,赶紧学习证明自己的价值,走向人生巅峰吧。。扯远了,收!收到了不少的简信,再次感谢大家对我的支持和关注,也很庆幸大家能够坚持学习前三天的课程,相信大家对RAC都有了一点自己的理解了,可以试着慢慢融入项目了,然后今天介绍的知识点比较散,主要是解答一些大家遇见的常见问题,但是都是实用干货,一起学习吧。
使用RAC注意事项
-
第一点
利用cocoa pods导入RAC的时候,需要注意版本问题,推荐大家2.5版本,这也是OC的最后一个版本,他以后的版本都是支持Swift的了,所以在OC环境下,会出现问题。
'ReactiveCocoa', '~> 2.5' -
第二点
RAC中很多方法都是block写的,使用的时候要注意循环引用和内存泄漏,从而使block和当前对象都无法释放。
@weakify 将当前对象声明为weak.. 这样block内部引用当前对象,就不会造成引用计数+1可以破解循环引用
@strongify 相当于声明一个局部的strong对象,等于当前对象.可以保证block调用的时候,内部的对象不会释放
-
第三点
属性类型的判断使用和监听调用
在所有情况下,RAC数据处理都带的id类型,一般情况下,都会根据数据结构,换成x所对应的类型,然后再处理数据。
还有情况,例如,RACCommand的实例能够决定是否可以被执行,这个特性能反应在UI上,而且它能确保在其不可用时不会被执行。通常,当一个命令可以执行时,会将它的属性allowsConcurrentExecution设置为它的默认值:NO,从而确保在这个命令已经正在执行的时候,不会同时再执行新的操作。当有时候,同时需要进行另外操作的时候,就要协调好信号的顺序。
RACCommand分析
RACCommand是RAC的一大基础控件,用于表示事件的执行,一般在应用的时候是用来处理数据请求,去主动执行请求数据的操作,能节省开发的很多时间。
command的初始化方法中有一个enabledSignal参数,这个signal就是用来指名command能否被执行的。例如,我们可以用此验证邮箱或信息是否合法,当用户输入的email地址合法时,它才能被执行,这里加以判断。self.emailValidSignal这个signal每当email的文本更新时,会发送NO或YES。
signalBlock参数在command需要执行时调用,这个block需要返回一个signal用来表示正在执行,之前将allowsConcurrentExecute的值设置为默认值NO,此时command会观察这个signal,而且在这个执行进度完成前,不允许新的执行。
当我们把command的触发事件设置成某一按钮的点击事件时候,这个按钮的enable状态会根据command能否执行来自动改变。当用户点击按钮时候,command会自动执行,如果你需要手动执行command,可以发送消息[RACCommand execute:]
RACTuple分析
RACTuple在RAC中称为元组,是一个元素类,父类是NSObject,既然是元组,那里面就会有很多元素。
1.初始化一个RACTuple对象数据来自一个数组
+ (instancetype)tupleWithObjectsFromArray:(NSArray *)array;
2.初始化一个RACTuple对象数据来自一个数组,如果convert设置为YES,那么NSNull值会被转换为RACTupleNil
+ (instancetype)tupleWithObjectsFromArray:(NSArray *)array convertNullsToNils:(BOOL)convert;
3.初始化一个RACTuple对象数据来自一个数组
+ (instancetype)tupleWithObjects:(id)object, ... NS_REQUIRES_NIL_TERMINATION;
4.返回元素数组
-(NSArray *)allObjects;
5.还可以增加元素
-(instancetype)tupleByAddingObject:(id)obj;
实例分析:
例如一个页面需要弹出很多种类型的提醒alert,如果一般根据tag判断,可能会麻烦,代码会很多。这时候,多种情况下,就可以用到元组。
响应事件也很简单
[[self.alert rac_buttonClickedSignal]subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
结语
RAC的学习笔记文字版本就先告一段落了,我也在不断学习的路上,还是需要靠项目经验来巩固基础知识。希望大家一起进步,生活不止眼前的苟且,如果银行卡里没有金钱,你和诗和远方的距离也就是一篇优美的文字。希望我小小的文字,能帮助你点滴。
网友评论