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!");
        return nil;
    }];
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:@"发送信号就在创建信号里面"];
        return nil;
    }];
不难发现上面有两个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!!

打完收工。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 1.ReactiveCocoa简介 ReactiveCocoa(简称为RAC),是由Github开源的一个应用于i...
    清蘂翅膀的技术阅读 1,973评论 0 1
  • “因为一个人,爱上一座城。”这是上大学之前经常听到的一句话。然而那时候并没有对谁有牵挂,有期待。因此选择...
    小未公子阅读 334评论 0 0
  • 一、五个人 放周末的时候,初慢决定去找一下辰雨,“辰雨同学,你真的不打算跟我们一起并肩作战吗?”初慢追着辰雨。 辰...
    林里叶落阅读 211评论 0 2
  • 感谢阅读!本文乃作者个人原创,未经允许谢绝转载,欢迎转发分享。 经常被问到这样的问题: 因为育儿理念不同,和家里人...
    醒来么么阅读 933评论 3 2
  • 这个房子几乎装载了我对老家的全部记忆,因为从三岁一直到十八岁上大学离开,我这十五年间一直在这生活。 老家房子靠近村...
    梁兄阅读 274评论 0 0