我只是在比较 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/