iOS 开发高手课
戴铭
前滴滴出行技术专家
42934 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
用户故事 (1讲)
iOS 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

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

when
always
catch
then
扩展支持
使用方法
方法:then, catch
状态:pending, fulfilled, rejected
PromiseKit
Promise对象
使用Promise技术规范实现事件总线的优势
事件总线解决的问题
Promise
RxSwift
ReactiveCocoa
NSNotificationCenter
KVO
Block
Delegate
课后小作业
小结
第三方库
iOS系统现有技术
怎样构建底层的发布和订阅事件总线?

该思维导图由 AI 生成,仅供参考

你好,我是戴铭。今天,我来跟你聊聊怎么构建事件总线。
事件总线是对发布和订阅设计模式的一种实现,通过发布、订阅可以将组件间一对一和一对多的耦合关系解开。这种设计模式,特别适合数据层通过异步发布数据的方式告知 UI 层订阅者,使得 UI 层和数据层可以不用耦合在一起,在重构数据层或者 UI 层时不影响业务层。
现在,我们先一起来捋一下 iOS 系统里有没有现成可用的技术,当数据层异步发布数据后,可以通过 Delegate 回调给 UI 层来进行展示,但是这个只适合一对一的模式。如果异步处理完后,还需要将数据发布给其他 UI 进行处理和展示的话,就需要继续发布给其他 Delegate,从而造成 Delegate 套 Delegate 的情况。
使用 Block 和使用 Delegate 的情况类似。如果需要不断异步发布给下一个数据订阅者的话,也会出现 Block 回调嵌套其他 Block 回调的情况。
iOS 系统里也有一对多模式的技术,比如 KVO 和 NSNotificationCenter。
使用 KVO 是强依赖属性的,只要更新了属性就会发布给所有的观察者,对应关系过于灵活,难以管控和维护。NSNotificationCenter 也有类似的问题,通过字符串来维护发布者和订阅者之间的关系,不仅可读性差,而且和 KVO 一样面临着难以管控和维护的情况。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何构建底层的发布和订阅事件总线。作者首先分析了iOS系统现有的技术,包括Delegate、Block、KVO和NSNotificationCenter,并指出它们并不适合作为事件总线。随后介绍了Promise模式,通过Promise对象提供的统一接口实现了异步发布和订阅操作,使得事件总线的数据订阅和数据发布事件更加规范和易用。作者还介绍了PromiseKit,这是一个在iOS中实现Promise标准的第三方库,提供了一系列方便的方法和对苹果API的扩展。最后,作者总结了事件总线的重要性,以及PromiseKit的支持范围和使用方法,并鼓励读者尝试将PromiseKit集成到Objective-C工程中进行改造。整体而言,本文通过介绍事件总线的概念和PromiseKit的使用,为读者提供了一种新的思路和工具,帮助他们更好地处理复杂的业务逻辑和界面操作。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《iOS 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • 郑杰
    这里只说了 嵌套回调的问题用PromiseKit怎么解决,没说PromiseKit怎么实现事件总线啊
    2019-05-07
    4
    46
  • zhangkk
    如果一对多,多个类之间需要传递一个公共promise对象,来接受catch回调后的通知?
    2019-05-07
    6
  • GREEN ISLAND
    一对多 都没听倒具体用法
    2019-05-30
    5
  • mosn
    PromiseKit 和 Bolts-iOS, 还有 coobjc 哪个好?
    2019-05-07
    5
  • yu
    PromiseKit 帶來 delegate 與 block 的解偶,並且增加易讀性與 避免 callback 地獄。項目也正在使用lib, Google 也開源了自己的 Promise lib, Promises, 提供 await 等更加直覺的使用方式,最近打算來評估一下。
    2019-05-07
    2
  • Calabash_Boy
    "NSNotificationCenter是难以管控和维护的",这句话不知大佬是如何理解的?
    2019-07-23
    3
    1
  • 我唔知点死啊
    花了3天的时间,把PromiseKit应用到OC项目中,并修改了注册登录模块。代码简化很多,看起来也很舒服。目前遇到2个问题: 1. 如何延时处理下一个操作?(比如:注册成功后延时2秒再登录) 2. 文章中介绍了always和when方法,而在AnyPromise类文件却没看到它们的踪影。
    2019-05-16
    2
    1
  • 梅长苏
    除了RAC还有纯OC的发布 订阅框架吗?
    2019-05-07
    1
  • 享受慢生活🚨🚨
    其实ios原生有内部支持的opration q 也是支持的以及swift的result
    2020-09-16
  • 叶小合
    oc开发环境集成PromiseKit 全是错误
    2019-11-11
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部