原文发表于踏得网
Swift包括了非常多现代语言特性尤其是从一些脚本语言如Javascript/Ruby中汲取了营养。
此外苹果公布Swift时,使用特别选用的一些样例来宣称Swift性能对于Ojbective C的大幅提升(40~50%),如复杂对象排序,
Apple并未声称Swift APP比Objective-C APP性能优越,通过精心挑选的个例(也许是利用已知的Objective-C语言的缺陷),
却巧妙的留下了总体性能提升的印象。可是开发人员实际測试出来的情况却相反。
开发人员Keith第一时间给出了自己的測试结果,实际数据显示。Swift在简单循环、递增、赋值、数组扩展、字符串拼接上性能远不如Objective C。
可能的一个解释是Swift使用类classes,总在运行ARC(Auto Referrence Count),而Objective C则很多其它使用C风格的数据类型。
详细測试方法、代码和数据引用例如以下:
循环(Loop a million times)
Swift: 0.0036s
Objective-C: .0021s (1.7x faster)
循环里没有不论什么其它操作。实际上Swift在这里表现不错。由于Objective-C在这个測试用例下就好比一个简单的C语言測试。注意这里的循环方式是x=x+1
自增(Increment)
Swift: 0.024s
Objective-C: 0.0023s (10.4x faster)
奇怪的是Swift ++操作有严重的性能问题,比x=x+1慢6倍。
赋值(Assign)
Swift: 0.024s
Objective-C: 0.0022s (10.9x faster)
这仅仅是一个简单语句 x = y.
大概Swift使用了ARC,保留和释放一百万次显然带来了性能伤害。
加入字符串到数组(Append native string to native array)
Swift: 6.49s
Objective-C: 0.046s (141.1x faster)
Swift代码使用了字符串数组(Array of String). Objective-C中则是把一个NSString加到一个NSMutableArray中,没有启用优化和其它改造。
而在Objective-C中使用CFMutableArrayRef还会更快,由于非常多情况下,你不须要去保留那个字符串。
加入整数到数组(Append native integer to native array)
Swift: 6.51s
Objective-C: 0.023s (283x faster)
Swift代码使用了整型数组Array of Int. Objective-C使用了NSNumber和NSMutableArray
拼接字符串(Concatenate two strings)
Swift: 3.47s
Objective-C: 0.27s (21x faster)
Swift内部循环代码:
theString3 = theString + theString2
Objective-C内部循环代码:
theString3 = [theString stringByAppendingString:theString2];
兼听则明,Swift还是新生儿。须要接受开发人员的考验。
一个明智的策略也许是对于现有的项目,保持使用Objective C。而对于新项目,尝试性使用Swift,
并让开发团队跟进Swift语言发展状况,随时学习。
很多其它Swift实时资讯可techbrood一下Swift。
by iefreer