ReactiveCocoa框架学习1
写block直接使用inline
block的声明类型
- 在ARC中使用strong,如果不使用strong,则会被销毁
- 在非ARC中使用copy
block在开发中的使用场景
- 把block保存到对象中,在恰当的时候才去调用
- 把block当做方法的参数使用,外界不调用,都是方法内部去调用,block实现交给外界决定
- 把block当做方法的返回值,目的就是为了代替方法,block交给内部实现,外界不需要知道block怎么实现,只管调用
ReactiveCocoa
- 简介:rac是由github开源的应用于iOS和OS开发的新框架
- 作用:可以把要监听的事情和要处理的事情的代码放在一起,方便管理,就不需要跳到对应的方法里.
- 优点:符合开发中高聚合,低耦合的思想
编程思想
- 面向过程
- 面向对象
- 链式编程思想
- 代表:masonry框架
- 使用约束的步骤:先添加控件,再设置约束
- 链式编程思想的特点:方法返回值必须是方法的调用者
- block:把需要操作的值当做block参数,block也需要返回值,就是方法调用者
- mas_makeConstraints执行流程:
- 创建约束制造者MASContraintMaker,绑定控件,生成了一个保存所有约束的数组
- 执行mas_makeConstraints传入进行的block
- 让约束制造者安装约束,清空之前的所有约束,遍历约束数组,一个一个安装
- 响应式编程思想
- 不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,这些时间像流一样的传播出去,然后影响结果,万物皆是流
- 代表:KVO运用
- 函数式编程思想
- 把操作尽量写成一系列嵌套的函数或者方法调用.
- 本质:往方法中传入block,方法中嵌套block调用,把代码聚合起来管理
- 特点:每个方法必须有返回值(对象本身),吧函数或block当做参数,block参数(需要操作的值),block返回值(操作结果)
- 代表:ReactiveCocoa
KVO的底层实现
- KVO的本质:就是监听一个对象有没有调用set方法
- 监听方法的本质:并不需要修改方法的实现,仅仅想判断下有没有调用
- 自定义NSKVONotifying_Person子类
- 重写setName方法,在内部调用super方法,恢复父类做法,通知观察者
- 如何让外界调用自定义Person类的子类?修改当前对象的isa指针,指向NSKVONotifying_Person
RAC编程思想
- rac结合了几种编程风格:
- 函数式编程(Functional Programming)
- 响应式编程(Reactive Programming)
- rac被描述为函数响应式编程(FRP)框架
- 以后使用rac解决问题,就不需要考虑调用顺序,直接考虑结果,把每一次操作都写成一系列嵌套的方法,使代码高聚合,方便管理
RAC常见类
- RACSignal:信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出数据
- RACSignal使用步骤:
- 创建信号(冷信号)
- 订阅信号(热信号)
- 发送数据(要在订阅信号后)
- didSubscribe调用:只要一个信号被订阅就会调用,作用是发送数据
- nextBlock调用:只要订阅者发送数据就会调用,作用是处理数据,展示到UI上面
- 只要订阅者调用sendNext,就会执行nextBlock
- 只要订阅RACDynamicSignal,就会执行didSubscribe
- 前提条件是RACDynamicSignal,不同类型信号的订阅,处理订阅的事情不一样
- RACDisposable:只要信号取消订阅,就会来到didSubscribe中return的block
- 默认一个信号在发送数据完毕就会主动取消订阅
- 只要订阅者在,就不会自动取消信号订阅
- 手动取消订阅信号[disposable dispose]
- RACSubject:信号提供者,自己可以充当信号,又能发送信号
- 使用场景:通常用来代替代理,有了它就不必要定义代理了
- 使用步骤:
- 创建RACSubject信号,底层会创建订阅者数组
- 订阅信号,将订阅者添加到订阅者数组
- 发送数据,遍历订阅者数组,分别调用订阅者对应的nextBlock
- RACReplaySubject:重复提供信号类,RACSubject的子类
- 区别:RACReplaySubject可以先发送信号,再订阅信号
- RACSubject则不可以
- 底层实现:
- 创建RACReplaySubject信号,底层会创建订阅者数组和值数组
- 调用sendNext发送信号,把值保存起来,然后遍历刚刚保存的所有订阅者,依次调用订阅者的nextBlock
- 调用subscribeNext订阅信号,遍历保存的所有值,依次调用订阅者的nextBlock
RACSubject替换代理
- 在第二个控制器.h中,添加一个RACSubject代替代理(创建信号)
- 监听第二个控制器按钮的点击,判断代理信号是否有值,如果有值,才需要通知(发送信号)
- 在第一个控制器中,监听跳转按钮,订阅代理信号
RAC集合
- RACTuple:元组
- RACSequence:集合
- 定义数组
- 将数组转为RAC集合
- 订阅集合信号,内部会自动遍历所有的元素并发送信号
RAC在开发中的常见用法
- 代替代理
- RACSubject:需要传参数的时候使用
- rac_signalForSelector:不需要传参数的时候使用
- 代替KVO
- rac_valuesAndChangesForKeyPath:用于监听某个对象的属性改变
- 监听事件
- rac_signalForControlEvents:用于监听某个事件
- 代替通知
- rac_addObserverForName:用于监听某个通知
- 监听文本框文字改变
- rac_textSignal:只要文本框发生改变就会发出这个信号
- 处理当界面有多次请求时,需要都获取到数据时才能展示界面
- rac_liftSelector:withSignalsFromArray:Signals:当传入的Signals(信号数组),每一个signal都至少sendNext过一次,就会去出发第一个selector参数的方法
- 注意:几个信号,参数一的方法就几个参数,每个参数对应信号发出的数据
ReactiveCocoa框架学习1的更多相关文章
- ReactiveCocoa框架学习<一>
1.Cocoapods导入ReactiveCocoa: use_frameworks! target 'RACDemo' do pod 'ReactiveObjC', '~> 2.1.0' en ...
- ReactiveCocoa框架学习2
昨天内容回顾 信号类:表示有数据产生,信号类不发送数据 注意:不同的信号,订阅方式不同 RACSignal 创建RACDynamicSignal信号 -> didSubscribe(block) ...
- ReactiveCocoa 入门学习 (一)
引言 现在由于需求的不断发展,MVC这个经典的框架由于Controller的任务越来越多,显得"臃肿"了,网上又推出了新的框架,比如MVVM,ReactiveCocoa, 今天就来 ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
- Hadoop学习笔记—18.Sqoop框架学习
一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...
- Spring框架学习一
Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...
- EF框架学习手记
转载: [ASP.NET MVC]: - EF框架学习手记 1.EF(Entity Framework)实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架 ...
- web框架学习列表
转载自鲁塔弗的博客,原文网址:http://lutaf.com/148.htm web framework层出不穷,特别是ruby/python,各有10+个,php/java也是一大堆 根据我自己的 ...
- 2013 最新的 play web framework 版本 1.2.3 框架学习文档整理
Play framework框架学习文档 Play framework框架学习文档 1 一.什么是Playframework 3 二.playframework框架的优点 4 三.Play Frame ...
随机推荐
- 此文件时入口文件index.php
此文件时入口文件index.php <?php //定义一下ThinkPHP框架存放的路径 define('THINK_PATH','./ThinkPHP/'); //定义当前的项目的名称,此处 ...
- POJ 2252 Dungeon Master 三维水bfs
题目: http://poj.org/problem?id=2251 #include <stdio.h> #include <string.h> #include <q ...
- 被windows“折磨”了一个礼拜
说是被windows折磨了一个礼拜,这话一点都不假!由于想彻底的卸载SQL Server而误删系统文件,导致系统重启之后持续蓝屏.无奈之下只能重装系统(心想,加入当初自己将系统备份的话,那该是多美好的 ...
- EasyUI datagrid数据表格的函数getData返回来的是什么
EasyUI datagrid数据表格的函数getData返回来的是什么? 他返回来的是这么一个对象: Object { rows=[10], total=15} 其中rows就是每一行的数据,是这些 ...
- 【BZOJ 1233】 [Usaco2009Open]干草堆tower (单调队列优化DP)
1233: [Usaco2009Open]干草堆tower Description 奶牛们讨厌黑暗. 为了调整牛棚顶的电灯的亮度,Bessie必须建一座干草堆使得她能够爬上去够到灯泡 .一共有N大包的 ...
- 带你了解世界最先进的手势识别技术 -- 微软,凌感,Leap...
转载 今天为大家解释一下现有的几种主要的手势识别技术,为你揭开手势识别技术的神秘面纱. 概述 谈起手势识别技术,由简单粗略的到复杂精细的,大致可以分为三个等级:二维手型识别.二维手势识别.三维手势识别 ...
- 利用TEA算法进行数据加密
TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 1994 年设计. ...
- How to: Use a Custom User Name and Password Validator
在wcf中使用自定义的用户名和密码验证方式 https://msdn.microsoft.com/en-us/library/aa702565.aspx http://www.codeproject. ...
- 一起啃PRML - 1.1 Example: Polynomial Curve Fitting 多项式曲线拟合
一起啃PRML - 1.1 Example: Polynomial Curve Fitting @copyright 转载请注明出处 http://www.cnblogs.com/chxer/ 前言: ...
- POJ_1182_食物链_[NOI]_(并查集)
描述 http://poj.org/problem?id=1182 共A,B,C三种动物,A吃B,B吃C,C吃A.给出询问 q : t , x , y , 表示: x 与 y 是同类 ( t==1 ...