服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Swift - Swift与Objective C的简单对比

Swift与Objective C的简单对比

2020-12-30 14:45解道 Swift

很多人想学习iOS开发,但是不知道如何从Objective-C和Swift之间选择。而网上的一些答案,大抵说的是,以后Swift终将取代Objective-C,但是目前来讲还是Objective-C比较重要。那么究竟怎样呢,今天我们就来探讨下

现在Swift和Objective C的竞争正在飞快加剧。 这是很容易理解的,因为他们都有各自的好处,一些开发人员对对如何选择一个适合项目的编程语言产生了困惑。

首先,这两者之间的选择是没有严格的答案。在做出选择之前,要考虑很多事情,包括各种因素和特征、各自缺点和优点。 因此,这里做一个概述,以客观展示双方之间的差异和利弊,因为我们认为明智的做法是选择根据是否适合自己的开发团队和具体项目进行选择。

管理考虑

第一个考虑是根据特定团队选择。即使Swift通常被称为更简单,更平滑的语法语言,它消除了更复杂的Objective-C的一些麻烦,但仍然有一些进入门槛。这里正确的问题不是“如果团队能够使用Swift / Objective-C构建新项目会怎样”,而是“现在的团队是否能使用它在截止日期之前完成任务?

与你的团队开会询问他们,必须确保他们不仅能够使用Swift实现,而且确保及时完成。如果团队是Objective-C专家,强制他们使用Swift并在一个有严格期限的项目上使用并不是一个好主意。反之亦然。 严格的截止日期决定了团队使用最舒适的语言(如果没有被环境覆盖)。

项目规模

下一个考虑可能是的项目的规模。 小型项目可以从Swift的简单语法,文件结构等功能中受益,而大型项目则可能会受到Swift这是一门年轻语言的影响。当然会有Xcode转换到新版本的手段,但他们不是完美的,随着项目增长事情变得更糟。Swift因为年轻也带来了一些缺点,比如错误和不稳定性,以Swift的原生IDE - Xcode为例,经常报告崩溃现象发生,Xcode语言的许多不兼容等问题也有报道,虽然Xcode中提升效率相当快,许多错误已经解决。 但是有些新错误还会来。

技术原因

这两种语言之间有多种区别,但它们至少有一个重要的特征 -它们都是苹果公司的主要编程语言,适用于所有苹果平台的应用程序开发。 Objective-C早在八十年代早期就已经开发出来,它属于Generation X.原始的Cocoa是写在其中的,虽然Swift的书面部分自2014年推出以来一直被添加到Cocoa和Cocoa Touch。

Objective-C是C的严格超集,从Xerox Smalltalk得到其面向对象的语法。 它的性质是高度动态的,具有动态绑定和动态类型,而Swift有静态类型检查。

现在让我们看看这两种语言的优势,一方优势可以被认为是另一一方弊端。

为什么选择Swift

使用方便

Swift的设计更容易使用,比Objective-C更容易阅读理解。它的语法更接近自然的英语,放弃了一些传统的约定 - 没有更多的括号链,在任何对象相关的关键字或Objective-C特定类型之前没有更多的“@”。 看起来更清晰; Swift有时被称为“没有C的Objective-C”。Swift不是基于C的,不仅简化了语法,而且降低了Java,Python,C ++等程序员用于掌握Swift的门槛。

Swift也不那么冗长,特别是在字符串处理中,甚至支持使用简单的“+”添加字符串。

内存管理在整个代码中是统一的,不同于以前的面向对象,自动引用计数(ARC)现在可以在代码的面向对象和过程两部分中同时适用。 Objective-C会有大量的内存泄漏,Swift使这点变得不可能了,并解放了程序员的开发时间。

此外,Swift不使用双文件系统,没有更多的.h头文件+ .m实现文件,只有一个.swift代码文件(感谢LLVM编译器和Xcode IDE依赖处理)。

安全

Swift被设计成一种安全的语言。在这个世界上没有不发生故障的安全语言,但是错误处理是非常好的考虑,类型系统是非常强大的。

不像Objective-C不会在nil指针调用上抛出异常,比如说,如果你试图调用一个未初始化的指针变量的方法,它只是使这个表达式为无操作,在Swift的可选类型和值类型使得在nil指针调用上生成编译器错误。这意味着无操作相关的不可预测的不稳定行为消失了,它大大缩短了错误修复费用。

动态库

在iOS 8中,一个期待已久的新技术被带到了移动平台 - 支持动态库。 从那时起,Swift应用程序能够与Swift的较新版本链接,允许Swift在演变上比iOS更快,这是现代语言必须的。 动态库也是外部的应用程序可执行文件,允许较小的初始下载和差异化的移动和嵌入式应用程序的负载。

未来

Swift可能只有两年时间,但自2014年以来,它的流行度已经迅速增长到所有开源Cocoa项目的30%左右。随着苹果明确瞄准Swift取代Objective-C作为他们的主要语言,未来将转向Swift。

但这不是一个明天就能达到的问题,这种过渡将需要一些时间,但它预计在5 - 10年左右,因此有开发人员适应的时间。

颇为青睐的效率苹果软件缺陷报告工具显示苹果有多努力地为Swift推广。苹果还将适应社区的想法,吸收其知识和经验,并在未来版本中实施其解决方案。 完美的方式。

为什么选择Objective-C

兼容性和支持

尽管Xcode团队的努力,但是IDE不是很好支持Swift,因为可能它太新了。自动完成滞后了,语法突出几乎是非基础功能的,重构工具会不工作。 使用Objective-C编程已经有一段时间了(> 30年了!),它非常成熟,有非常辉煌的工具支持。

由于Swift是“无C语言”,C ++库在这里不可用。 同样的包括C ++跨平台SDK和API的基础(如的CoreFoundation )。

有一些工具如桥接和包装类,但这些努力通常不值得,坚持Objective-C最好的情况下是使用C ++和Foundation API。

Swift不仅年轻,而且与旧的操作系统不兼容,它的支持从iOS 7.0+和Mac OS 10.9+开始(tvOS和watchOS支持任何版本的Swift),因此Objective-C是老平台的首选工具平台。

专业

不仅一些团队在Objective-C上有更多的经验,但是如果你有兴趣外包你的项目的一些部分,更容易找到第三方专家。

动态

尽管Swift可以从静态类型检查中获益于优化,但是即时添加的方法不再可用,所有类型都在运行时之前定义。 如果你绝对需要动态类型,那么Swift是不行的。

运行

Objective-C是一个更加确定的平台,因此它有一个更稳定,更强硬和可靠的运行时。 我们不想说Swift不能实现这个规模,但它需要时间。

结论

正如我们所看到的,两种语言都有自己的优势和权衡,但他们确实有可能一起工作(在较小的项目中,但最好是)。

延伸 · 阅读

精彩推荐
  • Swift详解Swift 之clipped是什么如何用

    详解Swift 之clipped是什么如何用

    这篇文章主要介绍了详解Swift 之clipped是什么如何用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    iCloudEnd8532021-05-28
  • SwiftSwift 基本数据类型详解总结

    Swift 基本数据类型详解总结

    在我们使用任何程序语言编程时,需要使用各种数据类型来存储不同的信息。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明...

    Lucky_William4672021-12-26
  • SwiftSwift中排序算法的简单取舍详解

    Swift中排序算法的简单取舍详解

    对于排序算法, 通常简单的, 为大家所熟知的有, 选择排序, 冒泡排序, 快速排序, 当然还有哈希, 桶排序之类的, 本文仅比较最为常见的选择, 冒泡和快排,文...

    Castie111012021-01-10
  • SwiftSwift算法之栈和队列的实现方法示例

    Swift算法之栈和队列的实现方法示例

    Swift语言中没有内设的栈和队列,很多扩展库中使用Generic Type来实现栈或是队列。下面这篇文章就来给大家详细介绍了Swift算法之栈和队列的实现方法,需要...

    李峰峰10002021-01-05
  • Swiftswift相册相机的权限处理示例详解

    swift相册相机的权限处理示例详解

    在iOS7以后要打开手机摄像头或者相册的话都需要权限,在iOS9中更是更新了相册相关api的调用,那么下面这篇文章主要给大家介绍了关于swift相册相机权限处...

    hello老文12682021-01-08
  • Swift分析Swift性能高效的原因

    分析Swift性能高效的原因

    绝大多数公司选择Swift语言开发iOS应用,主要原因是因为Swift相比Objc有更快的运行效率,更加安全的类型检测,更多现代语言的特性提升开发效率;这一系...

    louis_wang9092021-01-16
  • Swift浅谈在Swift中关于函数指针的实现

    浅谈在Swift中关于函数指针的实现

    这篇文章主要介绍了浅谈在Swift中关于函数指针的实现,是作者根据C语言的指针特性在Swifft中做出的一个实验,需要的朋友可以参考下...

    Swift教程网4372020-12-21
  • SwiftSwift网络请求库Alamofire使用详解

    Swift网络请求库Alamofire使用详解

    这篇文章主要为大家详细介绍了Swift网络请求库Alamofire的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    lv灬陈强56682021-01-06