正如 Craig 在 Swift 公告中透露的那样,据说它迄今为止比 Objective-C 更快。
但我不太相信这种比较,因为正确实现的算法在 C 中应该是最快的,因为它可以由编译器高度优化,并且本质上是硬件友好的。
所以我猜测 Swift 可以获得的最佳性能是 C 语言中相同算法的性能。
既然 C 是 Objective-C 的一部分,为什么 Objective-C 和 Swift 的性能差距那么大呢?
我能想象的唯一原因是苹果使用 NSNumbers 等而不是 C 类型,但不应该作为 Obj-C - Swift 比较的基础,对吧?
这很大程度上是猜测(尽管是有根据的猜测),但我的两大理论是:
1) No 减少动态方法调度。 Objective-C 中的每个方法调用都会经过objc_msgSend。在最快的情况下,这可以快至 16 条指令,但也可能慢很多。与 Objective-C 相比,Swift 会在更少的情况下遭受这种惩罚,例如:对仅 swift 协议方法的方法调用不会命中objc_msgSend,但是如果协议是在 Obj-C 中声明的,或者 swift 协议用@objc(这样它也可以被 Objective-C 对象采用),然后对 swift 对象采用的该协议中的方法的方法调用似乎是通过objc_msgSend.