常见编程思想介绍
在开发中我们也不能太依赖于某个框架,否则这个框架不更新了,导致项目后期没办法维护,比如之前Facebook提供的Three20框架
,在当时也是神器,但是后来不更新了,也就没什么人用了。
因此学习一个框架,有必要了解其编程思想
。
先简单介绍下常见几种的编程思想
。
1 面向过程
:处理事情以过程为核心,一步一步的实现。
2 面向对象
:万物皆对象
3 链式编程思想
:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)
链式编程特点
:方法的返回值是block, block必须有返回值(对象本身),block参数(需要操作的值)代表
:masonry框架。练习一
:模仿masonry,写一个加法计算器,练习链式编程思想。
4 响应式编程思想
:不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,这些事件像流一样的传播出去,然后影响结果,借用面向对象的一句话,万物皆是流。
代表
:KVO运用。练习二
:KVO底层实现。
5 函数式编程思想
:是把操作尽量写成一系列嵌套的函数或者方法调用。
函数式编程本质
:就是往方法中传入Block,方法中嵌套Block调用,把代码聚合起来管理函数式编程特点
:每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作的值)block返回值(操作结果)代表
:ReactiveCocoa。练习三
:用函数式编程实现,写一个加法计算器,并且加法计算器自带判断是否等于某个值.
RAC是什么?
RAC 全称: ReactiveCocoa , 是在 Github 上开源的一个应用于 iOS 和 OS X 开发的新框架。
RAC 具有函数式编程和响应式编程的特性(FRP 即: 函数 响应式 编程)。
它主要吸取了 .Net 的 Reactive Extensions 的设计和实现。
资料:http://blog.devtang.com/2016/01/03/reactive-cocoa-discussion/
block用strong(非ARC用copy)
ReactiveCocoa简介
ReactiveCocoa(简称为RAC
),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾。
RAC优点
在我们iOS开发过程中,经常会响应某些事件来处理某些业务逻辑,
例如按钮的点击,上下拉刷新,网络请求,属性的变化(通过KVO)或者用户位置的变化(通过CoreLocation)。
但是这些事件都用不同的方式来处理,比如action、delegate、KVO、callback等。其实这些事件,都可以通过RAC处理,
ReactiveCocoa为事件提供了很多处理方法,而且利用RAC处理事件很方便,可以把要处理的事情,和监听的事情的代码放在一起,这样非常方便我们管理,就不需要跳到对应的方法里。
非常符合我们开发中高聚合,低耦合
的思想。
ReactiveCocoa结合了几种编程风格:
函数式编程(Functional Programming)
响应式编程(Reactive Programming)
所以,你可能听说过ReactiveCocoa被描述为函数响应式编程(FRP)框架。
以后使用RAC解决问题,就不需要考虑调用顺序,直接考虑结果,把每一次操作都写成一系列嵌套的方法中,使代码高聚合,方便管理。
在正式学习RAC编程之前,
先通过3个最简单的例子
直观感受一下几种编程思想不同之处:
链式编程示例:
Masonry的链式思想:
将多个操作(多行代码)通过点号.()链接在一起成为一句代码,代码的可读性好,如a(1).b(2).c(3)
链式编程特点:
方法的返回值是block, block必须有返回值(本身对象),block的参数(需要操作的数值)
Masonry的链式思想实现的计算器示例
一个提供计算功能的分类:
一个计算器类:
响应式编程示例:
响应式编程,如KVO,
不需要考虑调用顺序,类似蝴蝶效应,产生一个事件,会自发地影响很多东西,像流一样的传播开去,然后影响结果.
万物皆是流.
KVO底层实现:
1.动态创建新类:NSKVONotifying_Person,
NSKVONotifying_Person是Person子类,以作KVO用
2.修改当前对象p的isa指针->NSKVONotifying_Person
3.只要调用对象p的set,就会调用新类的NSKVONotifying_Person的set方法
4.重写新类NSKVONotifying_Person的set方法,
4.1. 调用[super set:]
4.2. 同时通知观察者,告诉你属性发生改变
// 就是去判断有没有调用一个对象的set方法
新建一个Person类
控制器中的代码:
使用系统提供的KVO
使用自己的KVO实现
自己仿造系统KVO实现原理, 自己定义一个类, 继承自Person
创建一个NSObject的分类,自己手动实现addObserver方法
函数式编程示例:
函数式编程:把操作尽量写成一系列嵌套的函数或方法调用.
特点:
1.每个方法必须有返回值(本身对象),
2.把函数callbackFunction 或者 block 当成参数.
3.block的参数 是需要操作的变量
4.block的返回值 是操作完成后的结果
控制器中的代码:
计算器类代码:
未完待续,下一章节,つづく