iOS开发高手课
戴铭
前滴滴出行技术专家
立即订阅
11464 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 锚定一个点,然后在这个点上深耕
免费
基础篇 (20讲)
01 | 建立你自己的iOS开发知识体系
02 | App 启动速度怎么做优化与监控?
03 | Auto Layout 是怎么进行自动布局的,性能如何?
04 | 项目大了人员多了,架构怎么设计更合理?
05 | 链接器:符号是怎么绑定到地址上的?
06 | App 如何通过注入动态库的方式实现极速编译调试?
07 | Clang、Infer 和 OCLint ,我们应该使用谁来做静态分析?
08 | 如何利用 Clang 为 App 提质?
09 | 无侵入的埋点方案如何实现?
10 | 包大小:如何从资源和代码层面实现全方位瘦身?
11 | 热点问题答疑(一):基础模块问题答疑
12 | iOS 崩溃千奇百怪,如何全面监控?
13 | 如何利用 RunLoop 原理去监控卡顿?
14 | 临近 OOM,如何获取详细内存分配信息,分析内存问题?
15 | 日志监控:怎样获取 App 中的全量日志?
16 | 性能监控:衡量 App 质量的那把尺
17 | 远超你想象的多线程的那些坑
18 | 怎么减少 App 电量消耗?
19 | 热点问题答疑(二):基础模块问题答疑
20 | iOS开发的最佳学习路径是什么?
应用开发篇 (12讲)
21 | 除了 Cocoa,iOS还可以用哪些 GUI 框架开发?
22 | 细说 iOS 响应式框架变迁,哪些思想可以为我所用?
23 | 如何构造酷炫的物理效果和过场动画效果?
24 | A/B 测试:验证决策效果的利器
25 | 怎样构建底层的发布和订阅事件总线?
26 | 如何提高 JSON 解析的性能?
27 | 如何用 Flexbox 思路开发?跟自动布局比,Flexbox 好在哪?
28 | 怎么应对各种富文本表现需求?
29 | 如何在 iOS 中进行面向测试驱动开发和面向行为驱动开发?
30 | 如何制定一套适合自己团队的 iOS 编码规范?
31 | iOS 开发学习资料和书单推荐
32 | 热点问题答疑(三)
原理篇 (6讲)
33 | iOS 系统内核 XNU:App 如何加载?
34 | iOS 黑魔法 Runtime Method Swizzling 背后的原理
35 | libffi:动态调用和定义 C 函数
36 | iOS 是怎么管理内存的?
37 | 如何编写 Clang 插件?
38 | 热点问题答疑(四)
原生与前端共舞 (5讲)
39 | 打通前端与原生的桥梁:JavaScriptCore 能干哪些事情?
40 | React Native、Flutter 等,这些跨端方案怎么选?
41 | 原生布局转到前端布局,开发思路有哪些转变?
42 | iOS原生、大前端和Flutter分别是怎么渲染的?
43 | 剖析使 App 具有动态化和热更新能力的方案
用户故事 (1讲)
用户故事 | 我是如何学习这个专栏的?
结束语 (1讲)
结束语 | 慢几步,深几度
iOS开发高手课
登录|注册

22 | 细说 iOS 响应式框架变迁,哪些思想可以为我所用?

戴铭 2019-04-30
你好,我是戴铭。
说到 iOS 响应式框架,最开始被大家知道的是 ReactiveCocoa(简称 RAC),后来比较流行的是 RxSwift。但据我了解,iOS 原生开发使用 ReactiveCocoa 框架的团队并不多,而前端在推出 React.js 后,响应式思路遍地开花。
那么,响应式框架到底是什么,为什么在 iOS 原生开发中没被广泛采用,却能在前端领域得到推广呢?
我们先来看看响应式框架,它指的是能够支持响应式编程范式的框架。使用了响应式框架,你在编程时就可以使用数据流传播数据的变化,响应这个数据流的计算模型会自动计算出新的值,将新的值通过数据流传给下一个响应的计算模型,如此反复下去,直到没有响应者为止。
React.js 框架的底层有个 Virtual DOM(虚拟文档对象模型),页面组件状态会和 Virtual DOM 绑定,用来和 DOM(文档对象模型)做映射与转换。当组件状态更新时,Virtual DOM 就会进行 Diff 计算,最终只将需要渲染的节点进行实际 DOM 的渲染。
JavaScript 每次操作 DOM 都会全部重新渲染,而 Virtual DOM 相当于 JavaScript 和 DOM 之间的一个缓存,JavaScript 每次都是操作这个缓存,对其进行 Diff 和变更,最后才将整体变化对应到 DOM 进行最后的渲染,从而减少没必要的渲染。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《iOS开发高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(18)

  • 景天儿
    1 普通的函数式编程,就是函数可以作为参数、返回值。这使得:
    1.1 链式编程成为可能,Masonry就是一个特别好的例子。
    1.2 异步调用,函数式编程的结果很像观察者模式。
    1.3 同步调用,函数式编程的结果有点像模板模式。

    2. 稍纯一些的函数式编程,则强调只用常量,不用变量,也就是可以赋值,不能修改删除,机器学习里面基本都是这么搞。强调输入一样时,输出也一样。

    3. monad,以及连赋值都不允许的函数式,之前只听过,没有研究。看了这篇文章中推荐的王垠的博文,感觉理解加深了不少,尤其是参数、局部变量、全局变量与“状态”、数据传输关系的理解上。真的是坑…

    4. swift里面支持的高阶函数,有点儿像上面第二种函数式编程。

    5. 我理解的响应式编程,就是分离事件的发起者和接受者。其实target-action,block,delegate,kvo,通知,都是可以看作响应式编程。

    6. 从设计模式的角度来说,响应式编程与观察者模式、状态模式的思想最接近。
    2019-06-04
    1
    7
  • Geek_45fc02
    引入后RAC调试实在是太痛苦了,线程栈里嵌套了太多RAC内部的调用,很难追溯到用户真正使用的代码。
    2019-05-21
    4
  • bo
    RAC宏确实牛逼。看了源码学到了很多东西。现在公司项目中虽然没有引入 rac。但是把 rac 的宏提取出来用。自定义参数个数并依次处理,非常的方便。
    2019-04-30
    3
  • 大土豆
    在Android开发界,RxJava是病毒一样的流行,不懂RxJava,就不要找工作了,以致于所有的东西都被RxJava化,而iOS开发界,则是天差地别
    2019-04-30
    3
  • xilie
    我觉得函数响应式编程其实是简化了程序的逻辑并解耦,就拿传值来说,对象 A 将属性 a 传给对象 B,B再传给 C, C 修改 a,A 再针对 a 的修改做响应,传统的赋值,整个数据和逻辑会随着传递越多越复杂,而响应式,则很简单啊,说不清楚,反正实际开发中,确实简单了很多
    2019-05-29
    1
  • 在我的理解中,Masonry也属于响应式编程,框架的作者最初貌似是写JAVA的,Masonry的响应式貌似比RAC的要轻量级…RAC用到了很多运行时方法替换,调试起来比较麻烦

    作者回复: 两者使用场景不同,可比性不大

    2019-04-30
    1
  • 贰叁
    我的理解,观察者是实现响应式的关键,monad是实现函数式的关键。

    函数式提供了 X –> [X] , –> 的直观操作
    2019-04-30
    1
  • 微笑美男😄
    那篇宏的 没有看懂。有点难理解
    2019-09-26
  • 烘哄轰、
    React.js的Virtual DOM其实类似于JavaScript和Dom之间的一个缓存。JavaScript每次都是操作这个缓存,之后进行Diff计算和变更,最后才将整体变化对应到DOM进行最后的渲染。
    2019-05-22
  • 何乐乐
    我觉得React还有一个很重要的点是:React框架帮我们处理 UI 和状态同步,我们不需要用命令式的方式去操作 UI,我们只需要关注状态层数据的正确性。DOM diff 只是为了性能更好的更新 UI,最小化操作 DOM。
    而 iOS 和 Android 原生都缺少比较好的声明式 UI 布局方式,当UI 视图改变时,没有太好的方式避免视图的重复创建和渲染。我们操作 UI 大部分时候还是使用命令式的方式。
    2019-05-11
    1
  • 张元鹏
    KVO采用了isa swizzle,所以KVO过的class不能再次使用isa swizzle,这点会有限制,而且只能在objc runtime下使用,所以KVO的使用也越来越少了。
    2019-05-07
  • 家有萌柴fries
    ComponentKit老师有了解么?想问问看ComponentKit里面是怎么做到对state变化的监听呢?
    2019-05-02
  • 木木彡
    使用RAC挺多的吧
    2019-04-30
  • springxiao
    1、RN指的是React Native,而不是ReactiveCocoa,两个不同的框架
    2、RN前两年火了一阵,貌似现在大厂用的也很少
    2019-04-30
  • change
    大厂采用RN的理由是热跟新吗
    2019-04-30
  • 姜浩远
    既然看上去存在的好处不多,但为什么一些大厂还在使用 ReactiveCocoa 呢?
    2019-04-30
    1
  • 彭序猿
    有朋友能解释下:命令式、响应式、函数式、链式这几个的区别联系吗?
    2019-04-30
    1
  • ssala
    我的理解是,逻辑复杂以后,程序的内在复杂度提升,无论采用何种编程范式,无论是面向对象还是函数式编程,都不会降低程序本身的复杂度。而至于可读性,决定因素在编写代码的人,和使用的框架,语言关系不大。
    2019-04-30
收起评论
18
返回
顶部