加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift 和Objective-C 性能对比

发布时间:2020-12-14 01:46:40 所属栏目:百科 来源:网络整理
导读:很多人会有这样的疑惑 Swift 和Objective-C 性能对比 两者到底那个性能比较好一些呢 ? 我们面对一个新的问题要感觉去提问 苹果公司说Swift 的性比Objective-C 的性能要好 是真的好吗?不见得 我们对待任何一个问题要持有怀疑的态度 这样我们收获的才会更多

很多人会有这样的疑惑 Swift 和Objective-C 性能对比

两者到底那个性能比较好一些呢 ?

我们面对一个新的问题要感觉去提问 苹果公司说Swift 的性比Objective-C 的性能要好

是真的好吗?不见得 我们对待任何一个问题要持有怀疑的态度 这样我们收获的才会更多

我们应该这样考虑问题 Objective-C 较Switf 是偏底层的东西

Swift 是后面出来的高级语言 封装性较高 使用起来比较方便

但是越是封装性高的 高级语言 性能往往会差一些 但是它的开发效率较高

下面找一些数据来说明一下这个问题

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语言发展状况,随时学习。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读