问 HN:你们这些 Apple 开发者里还有多少人在用 Objective-C?
Apple 平台开发者在继续使用 Objective-C 和拥抱 Swift 之间存在分歧,主要集中在 iOS 和 macOS 开发上。许多人在大型、稳定的遗留代码库、更好的 C/C++ 互操作性、更快的编译,以及长期源代码兼容性方面依赖 Objective-C;而另一些人则偏好 Swift 的现代语言特性、更安全的类型系统,以及对新 Swift-only API 的访问。大家普遍认为新应用通常用 Swift 编写,但了解 Objective-C 对维护现有软件和理解底层系统行为仍然很有价值。
Objective-C 仍在使用的地方
- 很多生产中的应用(尤其是较老的应用,以及一些“AAA”/FAANG 规模的应用)仍然有大量的 ObjC 代码库。
- 一些团队在 SDK、跨平台 C/C++ 集成、macOS 特定工作以及底层系统 API 上默认使用 ObjC。
- ObjC 在遗留 Mac 应用、Swift 之前开发的长期 iOS 应用,以及内部工具中都很常见;几位发帖者认为 Apple 自己仍然大量使用 ObjC 和 C。
- 一些爱好者和独立开发者完全用 ObjC 构建新应用,通常是出于熟悉或简洁的原因。
开发者继续使用 Objective-C 的原因
- 与 Swift 相比,编译时间更快、更可预测,调试体验也更好。
- 与 C/C++ 的互操作性极佳,并且可以用 ObjC++ 处理混合代码库。
- 语言稳定,具备几十年的向后兼容性;非常老的 ObjC 代码仍然可以编译。
- 消息传递和运行时动态性被认为优雅且简洁(例如 method swizzling)。
- 避免 Swift 过去的破坏性变更和迁移痛点;有些人不信任 Apple 在 API 和工具上的频繁变动。
- 对一些人来说,ObjC“够用”,也没有迫切的商业理由去切换。
改用 Swift 的理由
- 现在大多数新代码和新应用都是用 Swift 编写的;初级开发者往往根本不会 ObjC。
- 新的 Apple API 越来越偏向 Swift-first 或仅支持 Swift,这使得长期只用 ObjC 变得受限。
- 开发者报告称生产力更高:样板代码更少、类型/可选值更安全、泛型、async/await,以及更容易使用现代 API。
- 混合项目通常会用 Swift 新增文件,同时保留稳定的 ObjC 代码不动。
互操作性与混合代码库
- Swift–ObjC 互操作性总体被认为不错,但在复杂项目中,或者当 Xcode 的构建图出问题时,可能会变得脆弱。
- 一些人认为 Swift 中的 C 互操作性还可以,另一些人则觉得很痛苦(桥接头文件、打包、SPM/xCFramework 的怪癖)。
- C++ 互操作性:历史上 ObjC 更好(ObjC++),不过 Swift 最近的 C++ 互操作性已经有所改进。
SwiftUI 和现代框架
- 对 SwiftUI 的看法分歧很大:对于简单 UI 和“设置界面”很棒,但也被描述为不成熟、有 bug,并且在复杂、有状态的视图(例如地图)上难以使用。
- 一些开发者避免使用 SwiftUI,而继续使用 UIKit/AppKit(无论是 ObjC 还是 Swift);另一些人则认为 SwiftUI 在受限场景下能显著提升生产力。
学习与生态系统
- ObjC 仍然很有价值,用于阅读旧代码示例、理解 Cocoa/AppKit 内部机制,以及与较老的 macOS API 对接。
- 一些学习者从 ObjC 开始,因为现代 Swift 资源对经典 Cocoa/AppKit 的覆盖很少。