objective-c - Swift 与 Objective-C 的性能对比

标签 objective-c swift

我只是在比较 Swift 的性能和 Objective-C .为此,我使用 NSDate 来测量所花费的时间,但我发现 Swift 和 Objective-C 之间存在很大差异。我刚刚运行了一个空的 for 循环 100,000 次。这是我的代码,

在 Objective-C 中,

NSDate * start = [NSDate date];

for (int i=0; i<=100000; i++) {

}

NSDate * end = [NSDate date];

double timeTaken = [end timeIntervalSinceDate:start] * 1000;

timeTaken 为 0.24 毫秒

在 Swift 中,

var start = NSDate()

    for i in 0...100000

    {

    }

    var end = NSDate()

    var timeTaken = end.timeIntervalSinceDate(start) * 1000

timeTaken 在 Swift 中是 74 毫秒,这与 Objective-C 相比有很大的不同。

我在测量中做错了什么吗?

最佳答案

你的所作所为纯属胡说八道。这个循环的性能如何并不重要,因为它不会在真实代码中发生。本质区别在于,在 Swift 中,循环将在每个步骤进行溢出检查,这是由于语言定义而需要的副作用。在 Objective-C 中,情况并非如此。

至少,您需要编写真正有意义的代码。

我做了一些真实测试,结果是: 1. Swift 和普通 C 的低级操作速度不相上下。 2. 当发生溢出时,Swift 会杀死程序,这样你就可以注意到溢出,而 C 和 Objective-C 会默默地给你无意义的结果。试试这个:

var i: Int = 0
var s: Double = 0.0

for (i in 1 .. 10_000_000_000) { s += Double (i * i) }

Swift 会崩溃。 (认为​​这很糟糕的任何人都对编程一无所知)。同样的事情在 Objective-C 中会产生无意义的结果。将循环替换为

for (i in 1 .. 10_000_000_000) { s += Double (i) * Double (i) }

并且两者都以相当的速度运行。

关于objective-c - Swift 与 Objective-C 的性能对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24077639/

相关文章:

swift - 扩展 Foundation 类以符合 Swift 协议(protocol)

swift - 在 Swift 4 for MacOS X 中,如何在 NSBox 中嵌入 NSStackView?

ios - 我可以以编程方式检查 UITableViewCell 是什么样式吗?

ios - 干净地将 Objective-C bool 值转换为 Swift Bool?

ios - 自定义方法现在由 cocoa 库定义

ios - 类的解析列值始终为零

objective-c - iOS 10.3.3 UIButton _intrinsicSizeWithinSize/_updateTitleView CoreFoundation 崩溃

iphone - 为什么弱 NSString 属性没有在 iOS 中发布?

swift - 使用多个条件查询 Firebase

ios - 作为类型扩展的 Swift 2.0 协议(protocol)