IOS ReactiveCocoa
一 前提:
在iOS开发过程中,当某些事件响应时,需处理的某些业务逻辑
Eg. 按钮点击:action
ScrollView滚动:delegate
属性值改变:KVO
ReactiveCocoa为事件提供了很多的处理方法,而且利用RAC处理事件很方便,可以把要处理的事件和监听代码放在一起,这样便于管理,不需要跳到对应的方法中,非常符合高聚合,低耦合的思想
二 ReactiveCocoa整体结构介绍:
1 信号源(事件流)RACStream
2 订阅者 RACSubscriber:在使用-subscriberNext:^(id x){}的方法订阅信号源进行处理后会生成一个清洁工RACDisposable,然后手动调用-dispose方法来进行清理工作
3 调度器 RACScheduler
4 清洁工 RACDisposable:他封装了取消和清理一次订阅所必须的工作,有一个核心的方法:-dispose,调用这个方法就会执行相应的清理工作,类似于NSObject的-dealloc方法
三 ReactiveCocoa响应式编程框架:
ReactiveCocoa中常用的是RACSignal,RACSignal继承自RACStream,Stream,即事件流,事件流是一个按时间排序的Events序列
四 主要内容:
1 RACSignal:RAC中最核心的类
信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出信号。这个类本身不具有发送信号的能力,而是交给内部的一个订阅者去做
默认的信号都是冷信号,也就是值改变了也不会触发,只有订阅了这个信号,这个信号才会变为热信号,值改变后才会触发,可以通过RACSignal的subscriberNext的方法进行订阅
2 RACSubscriber:
订阅者,用于发送信号,这是一个协议,不是一个类,只有遵守这个协议,并且实现方法才能成为一个订阅者,通过creat创建的信号,都有一个订阅者帮他发送数据
3 RACDisposable:
用于取消订阅或清理资源,不想监听某个信号时,可以通过她主动地取消订阅信号
4 RACSubject:
信号提供者,自己可以充当信号,又能发送信号,通常用来代替代理
5 RACTuple:
元组类,类似于NSArray,用来包装值
6 RACCommand:
RAC中用于处理事件的类,可以把事件如何处理,事件中的数据如何传递,包装到这个类中,可以很方便的监控事件的执行过程,用于监听网络请求,按钮点击
7 RACSequence:
RAC中的集合类,用于代替NSArray,可以用来快速的遍历数组和字典
8 RACMulticastConnection:
用于当一个信号,被多次订阅时,为了保证创建信号时,避免多次调用创建信号中的block,造成副作用,可以被这个类处理
9 RACScheduler:
RAC中的队列,用GCD封装
10 RACUnit:
表示Stream不包含有意义的值,可以直接理解为nil
11 RACEvent:
把数据包装成信号事件(signal envent)
五 ReactiveCocoa开发的常见用法:
1 代替代理: rac_signalForSelector
2 代替KVO,监听某个对象属性改变:rac_valueAndChangesForKeyPath
3 监听事件:rac_signalForControlEvents
4 代替通知:rac_addObserveForName
5 监听文本框文字改变(只要文本框改变就会发出信号):rac_textSignal
6 处理当界面有多次请求时,需要都获取到数据时,才能显示界面:rac_liftSelector:withSignalFormArray:Sihanls: 当传入的signals(信号数组),每一个signal都至少sendNext一次,就会去触发第一个selector参数的方法
六 参考链接:
iOS ReactiveCocoa使用浅析:http://www.jianshu.com/p/25922584bc43
最快让你上手ReactiveCocoa之基础篇:http://www.jianshu.com/p/87ef6720a096
IOS ReactiveCocoa的更多相关文章
- [iOS]ReactiveCocoa安装方法
1. 替换Ruby镜像 我们想要使用CocoaPods来安装ReactiveCocoa.由于OS X上的Ruby镜像被墙了,感谢淘宝为我们提供了国内访问镜像. $ gem sources --remo ...
- iOS ReactiveCocoa(RAC)学习详解
概述: ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的一个框架,有时间,自己也了解学习了一下这个框架的一些基本的应用,其实你要学的话网上是有很多很多的博 ...
- iOS ReactiveCocoa的使用
一.ReactiveCocoa简介 reactiveCocoa简称RAC,它是一个三方框架,很多人把它叫做函数响应式编程框架,因为它具有函数式编程和响应式编程的特性. 由于该框架的编程思想,使得它具有 ...
- iOS ReactiveCocoa简单使用笔记
涉及对象: 两个输入框,一个按钮. 代码功能: 随时监测输入框内容的长度变化,并在输入内容不符合预设要求时,立即改变输入框背景色. 在两个输入框的内容都符合预设要求时,按钮才可用. RACSignal ...
- iOS ReactiveCocoa 最全常用API整理(可做为手册查询)
本文适合有一定RAC基础的童鞋做不时的查询,所以本文不做详细解释. 一.常见类 1.RACSiganl 信号类. RACEmptySignal :空信号,用来实现 RACSignal 的 +empty ...
- iOS Reactivecocoa(RAC)知其所以然(源码分析,一篇足以)
前言 如今RAC大行其道,对其讲解的博客也多不胜数,稍微有点经验的估计也已经对这个爽到不要不要的框架运用自如了,真正沉下来研究其实现原理的估计也不在少数,这里仅仅是记录一下自己的分析理解,更是在写这篇 ...
- iOS开发ReactiveCocoa学习笔记(六)
RAC操作方法三. demo地址:https://github.com/SummerHH/ReactiveCocoa.git doNext deliverOn timeout interval del ...
- iOS-----GitHub上比较齐全的iOS 工具和App
Github-iOS 工具 和 App 系统基础库 Category/Util sstoolkit 一套Category类型的库,附带很多自定义控件 功能不错- BFKit 又一套Ca ...
- iPhone Tutorials
http://www.raywenderlich.com/tutorials This site contains a ton of fun written tutorials – so many t ...
随机推荐
- linux内核调度算法(2)--CPU时间片如何分配 转!
http://blog.csdn.net/russell_tao/article/details/7103012 内核在微观上,把CPU的运行时间分成许多分,然后安排给各个进程轮流运行,造成宏观上所有 ...
- 第3月第11天 vs2005调试 ace编译
1.vs2005调试 http://blog.csdn.net/u010797208/article/details/40452797 2.macbook ace编译 小坑: 源代码clockid_t ...
- Node.js入门学习笔记(三)
基于事件驱动的回调 这个问题不好回答,不过这是Node.js原生的工作方式.它是事件驱动的,这也是它为什么这么快的原因.你可以花一点时间阅读一下Felix Geisendörfer的大作 Unders ...
- word20161210
gateway / 网关 gateway account / 网关帐户 Gateway Service for NetWare / NetWare 网关服务 GDI objects / GDI 对象 ...
- Python简单源码解析
主要为一些简单的源代码的解析以及一些方法的理解. 说明:这些文件都不是我写的,详情可参考Github上的内容. 批量修改文件类型 def batch_rename(work_dir, old_ext, ...
- python des ecb 加密 demo
# -*- coding:utf-8 -*- from pyDes import * def hexString2bytes(src): ret =[] for i in range(len(src) ...
- Hide JSP error icons in Eclipse
down voteaccepted Can can either configure this at workspace level or overwrite at web project level ...
- Select标签下拉列表二级联动级联
首先从服务器端,绑定下拉列表,二级下拉的text命名按照一定规则加上一级下拉的ID. var options=new Array(); $(document).ready(function(){ // ...
- [python面向对象]--基础篇
1.#类 #类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 #定义一个类 class bar: def foo(self,agr): print(self,agr) obj = bar() ...
- iOS 状态栏隐藏显示
在 info.plist 文件中 配置 View controller-based status bar appearance 对应的值为 NO 这样可以使用 application 对象来设置 状态 ...