2024年WWDC上,苹果工程师演示新功能时用了17次async/await,Combine出现0次。这个数据来自一位现场逐句记录的开发者。不是苹果正式宣布放弃,但沉默本身就是一种态度。
5年前被捧为"响应式未来"的框架,如今成了简历上的技术债。问题不是它死了,而是你继续投入学习的ROI正在归零。
2019年:苹果押注的"数据流革命"
Combine诞生于iOS 13,和SwiftUI同年亮相。苹果把它定位为"自定义异步事件处理的统一方案",要终结Delegate、Notification、KVO的混乱局面。
当时的设计很激进:Publisher-Subscriber模式,声明式链式操作,背压控制。对于从RxSwift迁移过来的开发者,这像是官方认证的"正规军"。
但苹果留了一手。Combine仅限iOS 13+,而企业级App普遍要支持iOS 11。这导致一个荒诞局面:开发者学了Combine,生产环境却用回闭包和GCD。技术选型会议上,"最低版本支持"四个字直接否掉整个方案。
更隐蔽的问题是调试成本。链式操作一旦出错,堆栈信息像俄罗斯套娃。一位Uber工程师在2019年的技术分享中吐槽:"找内存泄漏时,Combine的调用链让我怀疑人生。"
2021-2022:async/await的"降维打击"
Swift 5.5引入结构化并发,苹果的态度开始清晰。WWDC 2021的Session 10134,工程师用40分钟讲解async/await,末尾5分钟才提Combine:"现有代码可以继续使用。"——翻译过来就是,新代码请换车道。
数据层面的对比很残酷。GitHub上Swift项目的关键词统计,async/await的提交量在2022年Q3首次超过Combine,此后差距持续拉大。不是Combine在萎缩,而是新代码根本不再选它。
核心差异在于心智负担。Combine要求你理解Publisher生命周期、内存管理、线程调度三重概念。async/await把这一切压平成顺序代码,编译器帮你处理调度。一位从Combine迁移过来的开发者打了个比方:"以前开手动挡,现在发现自动挡不是妥协,是进化。"
但Combine并非全无优势。复杂事件流组合、UI控件绑定、需要精确背压控制的场景,它仍是唯一选择。问题是,这些场景在典型App中占比不到15%。
2023-2024:Observation框架的"最后一刀"
Swift 5.9的@Observable宏,彻底改写了状态管理规则。以前用Combine的ObservableObject+@Published,现在直接标记@Observable,编译器自动生成观察逻辑。
苹果官方文档的更新很有说服力。SwiftUI教程中,"使用Combine进行数据流管理"的章节在2023年11月被整体替换为Observation示例。旧链接自动跳转,没有公告,没有迁移指南,像从没存在过。
技术社区的反馈更直接。Stack Overflow上,Combine相关问题的回答率在2024年降至61%,而async/await维持在89%。不是没人懂Combine,而是懂的人不再活跃回答——他们也在写async/await。
但这里有个反直觉的点:Combine的GitHub提交量其实稳定。查看苹果开源仓库,2024年仍有47次Commit,修复边界情况、优化性能。它没死,只是进入"维护模式"——像Objective-C一样,存在,但不再演进。
现在:什么情况下还得用Combine?
三类场景暂时无法替代。第一,需要组合多个异步源的操作,比如同时监听网络状态、定位权限、蓝牙连接,任意变化触发UI更新。Combine的merge、combineLatest操作符仍是最高效表达。
第二,UIKit遗留系统。大量2019-2021年写的代码基于Combine,迁移成本可能超过收益。特别是涉及自定义Publisher的业务逻辑,重写等于重新测试整个模块。
第三,跨平台团队使用RxSwift/ReactiveX。Combine的API设计接近Rx,技术栈统一能降低认知摩擦。但这理由在减弱——Kotlin协程和Swift async/await的语义正在趋同。
一位在硅谷做音视频SDK的工程师分享了真实决策:新项目完全用async/await,但保留了一个Combine的兼容层处理旧版回调。他的原话是:"不是技术选择,是政治选择。说服团队重写3万行代码,比说服产品经理延期上线容易。"
工程师的实用决策树
如果你正在技术选型,可以用这个流程:iOS 17+且纯SwiftUI?直接用@Observable。需要复杂异步组合?评估asyncAlgorithms库是否够用,不够再考虑Combine。维护2019-2021年的代码?维持现状,别动。
学习投入方面,Combine的优先级已低于Swift并发和SwiftData。不是它没用,而是机会成本太高。招聘市场的信号也很明确:2024年iOS岗位描述中,明确要求Combine的占比从2021年的34%降至7%,而async/await从12%升至89%。
但完全无视Combine也有风险。阅读旧代码库、维护第三方SDK、面试某些金融/医疗行业的保守团队,它仍是必考点。理想策略是"能读能改,不再新建"——像对待Objective-C一样。
苹果从未宣布Combine进入维护模式,但开发工具的演进不会说谎。Xcode 16的代码补全,输入"pub"时async/await相关提示排在Combine之前。这种细节比任何新闻稿都诚实。
一位在苹果工作的开发者私下说,内部新项目已经看不到Combine。不是禁令,只是默认选项变了。技术框架的死亡从来不是崩溃,而是成为"那个还需要解释为什么存在的东西"。
你现在代码库里还有多少Combine?下一个新项目,你会用async/await还是给它最后一次机会?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.