25 | 怎样构建底层的发布和订阅事件总线?
戴铭
该思维导图由 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
《iOS 开发高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(17)
- 最新
- 精选
- 郑杰这里只说了 嵌套回调的问题用PromiseKit怎么解决,没说PromiseKit怎么实现事件总线啊2019-05-07446
- zhangkk如果一对多,多个类之间需要传递一个公共promise对象,来接受catch回调后的通知?2019-05-076
- GREEN ISLAND一对多 都没听倒具体用法2019-05-305
- mosnPromiseKit 和 Bolts-iOS, 还有 coobjc 哪个好?2019-05-075
- yuPromiseKit 帶來 delegate 與 block 的解偶,並且增加易讀性與 避免 callback 地獄。項目也正在使用lib, Google 也開源了自己的 Promise lib, Promises, 提供 await 等更加直覺的使用方式,最近打算來評估一下。2019-05-072
- Calabash_Boy"NSNotificationCenter是难以管控和维护的",这句话不知大佬是如何理解的?2019-07-2331
- 我唔知点死啊花了3天的时间,把PromiseKit应用到OC项目中,并修改了注册登录模块。代码简化很多,看起来也很舒服。目前遇到2个问题: 1. 如何延时处理下一个操作?(比如:注册成功后延时2秒再登录) 2. 文章中介绍了always和when方法,而在AnyPromise类文件却没看到它们的踪影。2019-05-1621
- 梅长苏除了RAC还有纯OC的发布 订阅框架吗?2019-05-071
- 享受慢生活🚨🚨其实ios原生有内部支持的opration q 也是支持的以及swift的result2020-09-16
- 叶小合oc开发环境集成PromiseKit 全是错误2019-11-11
收起评论