Event Loop、函数式编程、IO多路复用、事件驱动、响应式、
编程思想
1.编程思想
在开发中我们也不能太依赖于某个框架,否则这个框架不更新了,导致项目后期没办法维护,比如之前Facebook提供的Three20框架
,在当时也是神器,但是后来不更新了,也就没什么人用了。因此我感觉学习一个框架,还是有必要了解它的编程思想
。
1.1 面向过程
:处理事情以过程为核心,一步一步的实现。
1.2 面向对象
:万物皆对象
1.3 链式编程思想
:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)
-
链式编程特点
:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值) -
代表
:masonry框架。 -
练习一
:模仿masonry,写一个加法计算器,练习链式编程思想。
1.4 响应式编程思想
:不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,这些事件像流一样的传播出去,然后影响结果,借用面向对象的一句话,万物皆是流。
-
代表
:KVO运用。 -
练习二
:KVO底层实现。
1.5 函数式编程思想
:是把操作尽量写成一系列嵌套的函数或者方法调用。
函数式编程本质
:就是往方法中传入Block,方法中嵌套Block调用,把代码聚合起来管理-
函数式编程特点
:每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作的值)block返回值(操作结果) -
代表
:ReactiveCocoa。 -
练习三
:用函数式编程实现,写一个加法计算器,并且加法计算器自带判断是否等于某个值.
2.ReactiveCocoa编程思想
ReactiveCocoa结合了几种编程风格:
函数式编程(Functional Programming)
响应式编程(Reactive Programming)
所以,你可能听说过ReactiveCocoa被描述为函数响应式编程(FRP)框架。
简单划分关系
除了函数式编程、其它概念有一定相似性,或者说是从不同角度、在不同环境下的叫法。
1、IO多路复用、事件驱动、响应式 概念类似或者一样
就是很多网络连接(多路),共(复)用少数几个(甚至是一个)线程。
2、Event Loop (比如iOS Run Loop)单线程中处理任务(一般来讲,一个线程一次只能执行一个任务)(实现这种模型的关键点在于:如何管理事件/消息,如何让线程在没有处理消息时休眠以避免资源占用、在有消息到来时立刻被唤醒。)
函数式编程:
语言层面的感念
0:在C++ Java中都是语法糖等级的东西,换言之不加入一样也有高阶函数。
1:Python, C#, Perl, JS, VB, 都是2010前加入Lambda的(Dart, Swift的确有2010后Lambda,不过他们俩就是2010后出的语言)
2:如果说其他的,C#, Python的List Comprehension也是2010前的,Java Generic则是1998由Philip Walder(Haskell界大佬), Martin Odersky(Scala界大佬)搞出来的
3:如果要说更远的影响力,Smalltalk都被Lisp严重影响,然后Smalltalk再影响现在一大推OO语言。
Event Loop:
常用于前端开发的一种技术?
多用于前端概念 JavaScript Node.js(解释和执行JavaScript代码的平台,用于后端) iOS的Run loop
JavaScript 运行机制详解:再谈Event Loop
IO多路复用:
一种在后端网络编程中的一种技术
空管员管理飞机例子 见: IO 多路复用是什么意思?
IO多路复用机制详解 服务器,并发,“事件驱动”的本质 IO多路复用机制详解
事件驱动:
处理事物方式上的叫法?
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
响应式编程:
一种突出技术特点式的叫法?
Reactive Programming
响应式编程是一种面向数据流和变化传播的编程范式
例如,在命令式编程环境中,a:=b+c表示将表达式的结果赋给a,而之后改变b或c的值不会影响a。但在响应式编程中,a的值会随着b或c的更新而更新。
例如,在MVC软件架构中,响应式编程允许将相关模型的变化自动反映到视图上,反之亦然。
例如,电子表格程序就是响应式编程的一个例子。单元格可以包含字面值或类似"=B1+C1"的公式,而包含公式的单元格的值会依据其他单元格的值的变化而变化。
iOS相关:ReactiveCocoa RxSwift