美文网首页
2019-12-10

2019-12-10

作者: David_2012 | 来源:发表于2019-12-10 10:46 被阅读0次

    iOS开发之RAC(一)初级篇

    一、RAC是什么?

    1、RAC全称:ReactiveCocoa, Github 一个开源框架!!

    2、ReactiveCocoa:函数响应编程框架!! (Reactive:响应。Cocoa:苹果开发中所有框架的总称。)

    3、作用:帮助我们更简单霸气的处理事件!!

    总结:RAC是一套super重量级函数响应编程开源框架,它可以帮助我们简单粗暴的处理事件!!!

    一张图让你全面认识RAC👇

    Preview.jpg

    二、RAC的四大家族

    1、Cocoa:包含了OC和swift代码

    2、ObjC:纯OC代码建议使用(本文使用的框架)

    3、Swift:纯swift的代码就可以使用它了

    4、Bridge:OC和swift混编就要用到它了

    建议:我们比较常见的就是Cocoa,但是如果是纯OC的代码,还是建议使用ObjC,至于纯Swift建议不要使用Swift,据传说是因为很难用。

    三、集成ReactiveObjC框架

    使用CocoaPads来集成,没有环境的,或者不会搭建环境的,可以自己去百度一下。懒癌入骨点这里:传送门

    有了环境后,简单的集成一下

    1、打开终端,cd到你的工程目录下。选择工程,直接拖进终端!然后回车

    cd /Users/wmhl/Desktop/你的工程名

    2、到了工程目录下,在终端继续输入:pod init 回车。这时你的工程目录下就会生成一个Podfile文件。

    image.png

    3、在终端继续输入:pod search ReactiveObjC 回车。为了确定ReactiveObjC是否支持CocoaPods和找到一段重要的代码。回车完后等待几秒如图所示,然后copy图中代码,随后在输入:wq

    image.png

    4、点击打开生成的Podfile文件,把copy的代码复制到如图的位置,然后可以关闭文件了。

    image.png

    5、再回到终端输入:pod install 回车。现在正在安装,稍等片刻,安装完后,输入:exit 回车。可以退出终端了。好了现在你的工程目录就是这样子了,以后打开工程就选择图中xcworkspace打开。里面就已经有了我们需要的ReactiveObjC框架

    image.png

    四、开始最简单的使用ReactiveObjC

    1、我们先认识一下RAC里最常见和常用的类:RACSignal(信号类)

    - 通过RACSignal创建一个信号!! (默认是: 冷信号!!)

    - 通过订阅者!订阅这个信号!(变成: 热信号!!)

    - 发送信号!!

    以上就是信号三部曲,下面我们来看代码的实现:

    1.1、创建信号

    //1.创建信号(冷信号!)RACSignal*signal=[RACSignal createSignal:^RACDisposable*_Nullable(id<RACSubscriber>_Nonnull subscriber){NSLog(@"Here I am!");returnnil;}];

    1.2、订阅信号

    //2.订阅信号(热信号!!)[signal subscribeNext:^(id x){//x:信号发送的内容!!NSLog(@"%@",x);}];

    1.3、发送信号

    RACSignal*signal=[RACSignal createSignal:^RACDisposable*_Nullable(id<RACSubscriber>_Nonnull subscriber){//3.发送数据subscriber它来发送[subscriber sendNext:@"发送信号就在创建信号里面"];returnnil;}];

    不难发现上面有两个block,经过测试总结如下:

    第一个(创建信号)block:是在订阅信号时被调用,如果不订阅信号的话,就永远不会被调用。

    第二个(订阅信号)block:是在发送信号时被调用,如果不发送信号的话,也是不会被调用的。

    我说你就信,必须的!!!

    送你一张流程图

    image.png

    2、实际开发中如何使用ReactiveObjC

    2.1、UITextField

    @weakify(self);[[self.testTextFileld rac_textSignal]subscribeNext:^(NSString*_Nullable x){@strongify(self);NSLog(@"%@",x);self.testTextFileld.text=@"Hello";}];

    监听了输入框内所有的变化,包括准备编辑,和退出编辑。再也不用写delegate了,编码起来方便快捷!!!

    2.2、UIButton

    [[self.btn rac_signalForControlEvents:(UIControlEventTouchUpInside)]subscribeNext:^(__kindof UIControl*_Nullable x){NSLog(@"%@",[x class]);}];

    平常写按钮的触发事件都要新建一个方法去实现,现在不用了,直接在你的按钮下面写实现的代码。实例化和触发事件写在一起,查阅代码和维护代码更加直观!!!

    2.3、NSNotificationCenter

    [[[NSNotificationCenter defaultCenter]rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil]subscribeNext:^(NSNotification*_Nullable x){NSLog(@"%@",x);}];

    还能监听通知的各种事件,上面就是监听了APP退到后台的事件。最重要的一点就是不需要移除通知,比通知用起来更爽,无后顾之忧!!!

    总结:更快!更简洁!!更有效!!!谁用谁知道!!!!

    友情提示:RAC虽然很好用,但却是一个充满block的世界,我们都知道block最大的坑就是循环引用。所以在使用RAC的时候,不要忘记了这个坑,看我上面的UITextField的代码示例,是不是发现了什么。对,你没看错,解决的方法就是外面一个@weakify(self),里面一个@strongify(self)。虽然有解决方法,但是尽量不要在block里面使用self!!!

    @weakify(self):为了打断循环引用!!

    @strongify(self):为了防止self被释放后,队列无法调用block!!

    打完收工。。。

    链接:https://www.jianshu.com/p/eb80e3803970

    来源:简书

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:2019-12-10

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