美文网首页iOS开发raciOS分享的demo
iOS RAC学习笔记 从零起步 (第四天)

iOS RAC学习笔记 从零起步 (第四天)

作者: 睡不着的叶 | 来源:发表于2016-07-25 16:25 被阅读935次
    坚持

    前言

    最近北京在下大雨,所以最近写文章的步伐收到了些许的阻挠,让有些朋友久等了。那么问题来了,北京下大雨关我写文章几毛钱的事情呢??答案就是,我写文章的时间都浪费在蹲屋里铲水了,穷人一族的心酸,伤不起啊,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的学习笔记文字版本就先告一段落了,我也在不断学习的路上,还是需要靠项目经验来巩固基础知识。希望大家一起进步,生活不止眼前的苟且,如果银行卡里没有金钱,你和诗和远方的距离也就是一篇优美的文字。希望我小小的文字,能帮助你点滴。

    相关文章

      网友评论

      • a24df6838a47:command的使用就结束了?
      • 卍面具:文章不错,刚开始学习RAC,以实例分析为例,alertview的最后执行响应事件是@selector中的方法还是在信号订阅中执行呢?
      • 冰三尺:很好的文章,学习了。

      本文标题:iOS RAC学习笔记 从零起步 (第四天)

      本文链接:https://www.haomeiwen.com/subject/krigjttx.html