Foundation 框架是大多数 macOS 和 iOS 应用程序的基石,提供了大量普通类型的抽象,包括 NSObject、NSString、NSArray 和 NSDictionary 等等,也是所有 iOS 开发者最初接触到的框架。
在以前,Foundation 框架主要是由 C 和 Objective-C 实现的,并且不开源,在 swift 诞生之后,继续沿用了这个实现,就产生一个 OC 到 swift 桥接的性能开销。并且 Foundation 框架已经很“老”了也遗留了很多历史问题,swift 团队觉得代码也该重构了。
为了解决以上的问题,Swift 团队决定用 swift 重写 Foundation 并且开源。
目前 Swift 团队已经实现了一部分功能,包括以下类:
-
AttributedString
-
Data
-
Date
-
DateInterval
-
JSONEncoder
-
JSONDecoder
-
Predicate
-
String 扩展
-
UUID
-
Calendar
-
TimeZone
-
Locale
-
DateComponents
-
FormatStyle
-
ParseStrategy
以上内容都已经开源在 Apple 的 Github 仓库中,大家有兴趣可以去 Clone。
因为新的 Foundation 是纯原生 Swift 实现,该框架不用再付出 C 和 Swift 之间的桥接转换成本,从而实现更快的性能,代码质量和性能也是这个项目的两个最重要的目标。
那性能提升了多少呢?或者说这个项目目前的收益是什么呢?按照苹果官方的说法:
-
Locale、TimeZone、Calendar、JSONDecoder、JSONEncoder 等不再需要 Objective-C 的桥接。
-
对于 Swift 写的客户端来说,操作 Locale 的速度要快一个数量级。
-
Calendar 计算日期的速度在某些基准测试中提高超过 20%。
-
使用 FormatStyle 的日期格式化速度提升了 150%。
-
利用 Codable 从 JSON 到 Model 的解码时间提升了近 5 倍。
看起来 Apple 是铁了心要放弃 OC 了,我了解到目前国内很多 iOS 开发者还在用 OC,其实为了以后的发展,一定要开始学习 Swift 了。
Swift Foundation 开源项目是一个很好的学习资料,因为以前不开源,所以我们不知道它内部的实现。现在终于可以一探究竟了,相信看完 Foundation 源码之后不管是对个人技术的提升还是对日常开发上层业务和性能优化都会有很大帮助。
参考资料
[1]
swift-foundation: github.com/apple/swift…
点击下方公众号卡片,关注我,每天分享一个关于 iOS 的新知识
本文同步自微信公众号 “iOS新知”,每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!