加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

现在是弃Objective-C从Swift的最好时机?

发布时间:2016-07-26 13:14:03 所属栏目:语言 来源:51CTO
导读:各位亲爱的iOS与OS X应用程序开发人员,如今正是将编程阵地转移至更为亲民、功能更为全面的Swift的最佳时机。

程序员不应该从自己所创建的每个数字化对象角度考虑内存管理工作。由于ARC能够在编译的过程中处理所有内存管理事务,因此大家的脑力应该专注于应用程序的核心逻辑以及各类新功能。由于Swift中的ARC能够跨越面向过程与面向对象的代码起效,因此其不再要求程序员把太多精力浪费在上下文切换方面——我们甚至能够直接编写出触及底层API的代码,从而一举解决Objective-C目前版本所面临的最大难题。

通过解决自动化与高性能内存管理这一难题,苹果公司用事实证明了Swift能够切实帮助程序员提高生产效率。另一项附加作用在于,Objective-C与Swift都不会受到用于清理未使用内存的垃圾收集机制(即Garbage Collector)的影响,正如Java、Go或者C#一样。这一点对于任何一种会被用于响应图形及用户输入内容的编程语言都非常重要,特别是在像iPhone、Apple Watch或者iPad这样的触控设备之上(在这些平台中,操作滞后会带来令人难以忍受的糟糕体验,并导致用户认为应用程序的运行出现了问题)。

5. Swift所需要的代码较少

Swift对于需要重复的语句以及字符串操作,Swift能够大大降低所需代码量。在Objective-C当中,处理文本字符串的过程非常繁琐,而且需要采取一系列步骤来将两组信息结合在一起。相比之下,Swift则具备多种现代编程语言特性,例如通过“+”运算符将两条字符串直接合并在一起,这种能力是Objective-C所不具备的。对于此类字符与字符串结合方式的支持能力已经成为任何一种需要在屏幕上向用户显示文本内容的编程语言的必备要素。

Swift中的类型系统能够降低代码语句的复杂程度——因为编译器能够直接识别出这些类型。举例来说,Objective-C要求程序员雇特殊的字符串标记(例如%s、%d以及%@),并提供一份由逗号分隔的变量列表来替代这些标记。Swift支持字符串插值,这就使程序员不必再死记硬背这些标记、而能够直接将变量插入到面向用户的字符串之内,例如标签或者按钮标题。相比之下,Objective-C中的类型推理系统与字符串插值则往往成为导致应用崩溃的诱因。

在Objective-C当中,弄乱字符串标记的顺序或者使用了错误的字符串标记都有可能令应用程序发生崩溃。但现在,Swift能够把程序员从这些繁琐的规定当中解放出来,并凭借着其对文本字符串及数据操作的内联支持能力保证翻译得出的代码成果更为精练(从而降低了代码出现错误的机率)。

6. Swift代码的执行速度更快

从深层角度看,舍弃C语言遗留特性让Swift在多个方面获得了巨大提升。Swift代码在性能基准测试中的出色表现也证明了,苹果公司确实一直在切实改善Swift运行应用程序逻辑时的速度水平。

根据Primate实验室——也就是高人气性能工具GeekBench的开发方——所公布的结果,Swift在去年12月采用Mandelbrot算法的计算绑定任务测试中,其性能表现已经与C++非常接近。

2015年2月,Primate实验室发现Xcode 6.3 Beta版本对Swift在GEMM算法——这是一项内存绑定型算法,面向大型数组进行连续访问——中的性能表现作出了进一步改善,其提升指标为1.4。而在最初的FFT算法当中——这是一项内存绑定型算法,面向大型数组进行随机访问——其性能提升幅度可达2.6倍。

Swift所采用的一系列最佳实践则让这种改进效果变得更为突出,其FFT算法性能测试中的性能提升幅度达8.5倍(而使用C++时其测试结果仅为Swift的1.1倍)。这样的增强效果同时也使得C++在Mandelbrot算法中仅仅获得了1.03倍于Swift的得分。

Swift语言在FFT与Mandelbrot两种算法中几乎已经能够与C++的性能水平相比肩。根据Primate实验室的说法,GEMM算法性能测试结果证明,Swift编译器无法像C++编译器那样实现代码量化——而这种量化方式正是快速提升性能表现的便捷途径,并将在下个版本中正式登陆Swift。

7.减少与开源项目之间的命名冲突

一直困扰着Objective-C代码的一大问题在于,其缺乏对于命名空间的正式支持能力,而这正是C++在解决代码文件名冲突时给出的办法。当这种名称冲突状况发生在Objective-C当中时,其会表现为一项链接错误,而且应用程序将无法正常运行。解决的办法虽然已经出现,但其却有可能引发其它潜在问题。一般而言,程序员往往会利用一段由两个或者三个字母组成的前缀来区分已经编写完成的Objective-C代码——换言之,就像是在Facebook上@了我们的代码一下。

Swift语言提供隐含的命名空间,允许不同项目之间使用同样的代码文件名称,且既不会导致build故障、亦不强制要求程序员使用NNString(即Next Step,是由乔布斯在离开苹果后创建的公司)或者CGPoint(即Core Graphics)这类命名方式。最后,Swift中的这一特性使得程序员能够进一步提高生产效率,且意味着他们无需再像使用Objective-C时那样记录大量文件名称。在Swift项目中,大家可以看到由这一影响而产生的诸如Array、Dictionary以及String等简单名称,而不再像过去那样被迫使用NSArray、NSDictionary以及NSString等Objective-C缺少命名空间所造成的畸形产物。

在Swift的帮助下,命名空间基于代码文件归属的目标所存在。这意味着程序员们能够利用命名空间标识符区分类或者值。Swift中的这项变更可谓意义重大。这极大地简化了将开源项目、框架以及库整合到自有代码中的流程。该命名空间使得不同软件厂商能够创建出同样的代码文件名称,而又无需担心在将其与开源项目整合时出现命名冲突。总而言之,现在Facebook与苹果都能够使用名为FlyingCar.swift的对象伖雇佣兵,而不会导致任何错误或者build故障了。

8. Swift支持动态库

Swift当中的最大变化——但同时又没能受到足够的重视——当数从以往的静态库经历多次大版本更新(iOS 7、iOS 8以及更多后续版本)而最终迎来了动态库支持。动态库属于可执行代码片段,且能够被接入到应用程序当中。这一特性意味着,如今Swift应用程序可以随着Swift语言的不断发展随时与其最新版本相对接。

(编辑:济南站长网)

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

热点阅读