Swift与Objective-C:应用性能

35

我正在研究Swift及其与Objective-C的区别。从我所了解的情况来看,当前版本的Swift相当快,甚至比Objective-C更快:点击这里查看。

然而,由于大多数测试都是使用排序算法等进行的,我想知道当它用于iOS应用程序开发时,Swift是否实际上比Objective-C更快。能否有人根据自己的经验给我一些启示。


我不认为这是基于个人观点的。无论是Swift还是Objective-C,都有客观上的速度优劣之分。 - user16217248
5个回答

42

苹果公司声称Swift比Objective-C更快,正如你所说的,在那些排序算法中它确实更快,但对于iOS开发的使用者而言,一个普通用户不会识别一个用Swift或Objective-C开发的应用程序之间的差异。我用Objective-C开发了很多在Apple Store中的应用程序,现在也用Swift开发了几个应用程序,到目前为止,用户无法区分哪一个比另一个快得多。

Swift不太可能导致比用Objective-C开发的应用程序运行更快的应用程序。虽然这两种语言非常不同,但它们都针对相同的Cocoa和Cocoa Touch API、iOS和OS X,并且都是静态类型的语言,都使用相同的LLVM编译器,因此它们并没有那么不同。由于这两种语言并不完全相同,所以会有性能差异,但不要期望出现显著的差异。

Swift也是苹果开发的,旨在吸引新的程序员,因为它更类似于Ruby和Python等语言,而不是Objective-C。


30

这里有一篇很不错的博客文章,讲解了Swift 1.2版本发布后性能的改进。

作者进行了多次测试,使用了不同类型的代码,如类似于Objective-C的Swift代码、纯Swift以及Objective-C代码。结果表明,Swift 1.2比以前更快。他还用JSON进行了测试,因此比仅仅算法更加实际。

除了实际的性能改进,我的个人经验是,我在Swift中开发更加轻松。我从来不喜欢Objective-C的.h.m文件,因为它会打断“编程的流程”。此外,我认为其语法比Objective-C [采用这些大括号] 更容易。

因此,如果你要从头开始编写一个新项目,Swift将更加容易、快速和优雅。(我的看法)


0

在任何语言中都可以编写慢速代码,Swift也不例外。我还没有时间完全评估Swift 1.2 Beta,但即使在大多数情况下,代码可以变得相当快速,但也很容易变得非常慢。特别是访问非最终实例方法非常慢,而调试版本则非常慢(我有几个案例比发布版本慢100倍)。稍微优化最深层嵌套循环的工作通常足以迅速将其接近C性能。

你编写的大部分代码并不那么关键,只要你能将慢速操作移到主UI队列之外。更多的时间将花在API调用上,而这些调用不会受到调用它们的语言的影响。即使在性能至关重要的情况下,需要进行大量优化的代码量往往很小,你可以仅针对这些部分切换到更快的语言(例如C)。

在比较Objective-C时,值得考虑的是我们所说的Objective-C是什么意思。您可以在Objective-C代码中编写C函数,并且它们将产生与C一样快的代码。我会说它们是C,而且要有意义地谈论Objective-C性能,应该是基于Objective-C消息发送和可能是NSArrays而不是原始C数组的代码。如果这是基础,那么Swift(在优化并使用结构体和最终类时)将表现得相当不错。但是,如果与C代码进行比较,目前情况下Swift通常会更慢。

我在我的博客上有几篇关于优化Swift的博客文章,我在十月份做了一个简短的演讲


-1

相较于Objective-C,Swift有其自身的优点,例如:Swift更容易处理字符串,Swift元组提供了复合变量,此外,编程人员不需要花费时间注释变量类型信息并冒险犯错;在大多数情况下,编译器可以从变量被设置的值中推断出类型。


2
这个答案并没有涉及性能问题,而这正是本题的关键。这是一个非常重要的问题。这些语言特性和编译器魔法是否值得为了它们而牺牲现有的、同样可行的解决方案的性能?我也喜欢这些特性,但它们甚至不值得付出轻微的性能代价。 - Morkrom
非建设性的。OP没有询问语言功能。而且,正如提到的那样,也没有涉及性能问题。 - Oren S

-4

Swift比Objective-C快,这是苹果的Swift团队所声称的,而且确实如此。然而,事实是,在编写响应式应用程序之前,您必须计划许多事情。以下是一些要点:

  1. 删除未使用的资源
  2. 优化资源(例如图像)
  3. 缓存
  4. 压缩
  5. 可重用代码
  6. 对象生命周期管理

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接