Swift vs Objective-C的表现

前端之家收集整理的这篇文章主要介绍了Swift vs Objective-C的表现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我只是比较 SwiftObjective-C的表现。为此,我正在使用NSDate来衡量所花费的时间,但是我在Swift和Objective-C之间有很大的区别。我刚跑了一个空的循环十万次。这是我的代码

在Objective-C中,

  1. NSDate * start = [NSDate date];
  2.  
  3. for (int i=0; i<=100000; i++) {
  4.  
  5. }
  6.  
  7. NSDate * end = [NSDate date];
  8.  
  9. double tiMetaken = [end timeIntervalSinceDate:start] * 1000;

tiMetaken是0.24毫秒

在斯威夫特,

  1. var start = NSDate()
  2.  
  3. for i in 0...100000
  4.  
  5. {
  6.  
  7. }
  8.  
  9. var end = NSDate()
  10.  
  11. var tiMetaken = end.timeIntervalSinceDate(start) * 1000

TiMetaken在Swift中为74毫秒,与Objective-C相比,这是一个很大的差异。

我在测量中做错了吗?

我不认为这是一个很公平的比较。你只是要求Objective-C执行一个循环,但是你要求Swift生成一个很大的范围(特别是Range< Int>),然后迭代它。在我的计算机上,Swift大约需要0.53秒的时间来遍历一百万的范围,但是只有大约0.012秒才能执行一个循环到一百万,这与Objective-C中程序的0.002秒相比。

我的程序(两个项目都设置为命令行工具)

  1. import Foundation
  2.  
  3. let start = CFAbsoluteTimeGetCurrent()
  4.  
  5. //for i in 0...1000000 {
  6. //
  7. //}
  8.  
  9. for var i = 0; i <= 1000000; ++i {
  10.  
  11. }
  12.  
  13. let tiMetaken = CFAbsoluteTimeGetCurrent() - start
  14.  
  15. println(tiMetaken)

和Objective-C

  1. #import <Foundation/Foundation.h>
  2.  
  3. int main(int argc,const char * argv[]) {
  4. @autoreleasepool {
  5.  
  6. double start = CFAbsoluteTimeGetCurrent();
  7.  
  8. for (int i = 0; i <= 1000000; i++) {
  9.  
  10. }
  11.  
  12. double tiMetaken = CFAbsoluteTimeGetCurrent() - start;
  13.  
  14. NSLog(@"%f",tiMetaken);
  15.  
  16. }
  17. return 0;
  18. }

删除自动释放池甚至刮掉千分之一千秒。但是,总而言之,差异不在任何接近大小的地方。

猜你在找的Swift相关文章