iOS开发高手课
戴铭
前滴滴出行技术专家
立即订阅
11447 人已学习
课程目录
已完结 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开发高手课
登录|注册

25 | 怎样构建底层的发布和订阅事件总线?

戴铭 2019-05-07
你好,我是戴铭。今天,我来跟你聊聊怎么构建事件总线。
事件总线是对发布和订阅设计模式的一种实现,通过发布、订阅可以将组件间一对一和一对多的耦合关系解开。这种设计模式,特别适合数据层通过异步发布数据的方式告知 UI 层订阅者,使得 UI 层和数据层可以不用耦合在一起,在重构数据层或者 UI 层时不影响业务层。
现在,我们先一起来捋一下 iOS 系统里有没有现成可用的技术,当数据层异步发布数据后,可以通过 Delegate 回调给 UI 层来进行展示,但是这个只适合一对一的模式。如果异步处理完后,还需要将数据发布给其他 UI 进行处理和展示的话,就需要继续发布给其他 Delegate,从而造成 Delegate 套 Delegate 的情况。
使用 Block 和使用 Delegate 的情况类似。如果需要不断异步发布给下一个数据订阅者的话,也会出现 Block 回调嵌套其他 Block 回调的情况。
iOS 系统里也有一对多模式的技术,比如 KVO 和 NSNotificationCenter。
使用 KVO 是强依赖属性的,只要更新了属性就会发布给所有的观察者,对应关系过于灵活,难以管控和维护。NSNotificationCenter 也有类似的问题,通过字符串来维护发布者和订阅者之间的关系,不仅可读性差,而且和 KVO 一样面临着难以管控和维护的情况。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《iOS开发高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(16)

  • 郑杰
    这里只说了 嵌套回调的问题用PromiseKit怎么解决,没说PromiseKit怎么实现事件总线啊
    2019-05-07
    1
    35
  • mosn
    PromiseKit 和 Bolts-iOS, 还有 coobjc 哪个好?
    2019-05-07
    4
  • zhangkk
    如果一对多,多个类之间需要传递一个公共promise对象,来接受catch回调后的通知?
    2019-05-07
    2
  • 我唔知点死啊
    花了3天的时间,把PromiseKit应用到OC项目中,并修改了注册登录模块。代码简化很多,看起来也很舒服。目前遇到2个问题:
    1. 如何延时处理下一个操作?(比如:注册成功后延时2秒再登录)
    2. 文章中介绍了always和when方法,而在AnyPromise类文件却没看到它们的踪影。
    2019-05-16
    1
    1
  • 梅长苏
    除了RAC还有纯OC的发布 订阅框架吗?
    2019-05-07
    1
  • 叶小合
    oc开发环境集成PromiseKit 全是错误
    2019-11-11
  • Calabash_Boy
    "NSNotificationCenter是难以管控和维护的",这句话不知大佬是如何理解的?
    2019-07-23
    1
  • GREEN ISLAND
    一对多 都没听倒具体用法
    2019-05-30
  • 徐秀滨
    想要让then能够传递参数,那么必须在then的block返回Promise,但是如果block是数据请求,那就会破坏已有的写法。这个要怎么处理呢?
    2019-05-21
  • 开元₂³³³³³³³
    希望大神能讲讲promise的具体应用,知道这个框架,一直无法应用到自己的项目
    2019-05-13
  • @syj@
    事件总线还是没说清楚,讲解的只是把之前的block或者delegate方法换成AnyPromise方法,希望大神详细讲解下一对多的
    2019-05-09
  • Boomm
    简化异步调用为同步书写这一点上,和阿里开源的coobjc很相似,想请教这两者有什么大的区别么?
    2019-05-09
  • 我的大好时光
    👍
    2019-05-07
  • yasuoyuhao
    PromiseKit 帶來 delegate 與 block 的解偶,並且增加易讀性與 避免 callback 地獄。項目也正在使用lib, Google 也開源了自己的 Promise lib, Promises, 提供 await 等更加直覺的使用方式,最近打算來評估一下。
    2019-05-07
  • liyoucheng
    抢沙发
    2019-05-07
  • 李志刚
    很实用,解决了某个操作依赖多个异步事件的场景,比如登陆操作依赖多个网络请求返回的场景。
    2019-05-07
收起评论
16
返回
顶部