Swift与Objective C的简单对比

 更新时间:2016年12月14日 08:45:44   作者:解道  
很多人想学习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 framework使用OC 代码两种方式示例

    swift framework使用OC 代码两种方式示例

    这篇文章主要为大家介绍了swift framework使用OC 代码两种方式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • swift中正确安全声明一个单例的方法实例

    swift中正确安全声明一个单例的方法实例

    这篇文章主要给大家介绍了关于swift中如何正确安全声明一个单例的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Swift绘制渐变色的方法

    Swift绘制渐变色的方法

    这篇文章主要为大家详细介绍了Swift绘制渐变色的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Swift如何调用Objective-C的可变参数函数详解

    Swift如何调用Objective-C的可变参数函数详解

    这篇文章主要给大家介绍了关于Swift如何调用Objective-C的可变参数函数的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用swift具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • Swift并发系统并行运行多个任务使用详解

    Swift并发系统并行运行多个任务使用详解

    这篇文章主要为大家介绍了Swift并发系统并行运行多个任务使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Swift中风味各异的类型擦除实例详解

    Swift中风味各异的类型擦除实例详解

    你也许曾听过类型擦除,甚至也使用过标准库提供的类型擦除类型如 AnySequence,下面这篇文章主要给大家介绍了关于Swift中风味各异的类型擦除的相关资料,需要的朋友可以参考下
    2022-04-04
  • Swift无限循环控件开发

    Swift无限循环控件开发

    这篇文章主要为大家详细介绍了Swift无限循环控件开发,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • 深入理解Swift语言中的闭包机制

    深入理解Swift语言中的闭包机制

    这篇文章主要介绍了Swift语言中的闭包机制,是Swift入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • IOS 实现简单的弹幕功能

    IOS 实现简单的弹幕功能

    本文主要介绍IOS 实现弹幕功能,这里给大家一个实例来展现弹幕功能,有需要的小伙伴可以参考下
    2016-07-07
  • Compose声明式代码语法对比React Flutter SwiftUI

    Compose声明式代码语法对比React Flutter SwiftUI

    这篇文章主要为大家介绍了Compose声明式代码语法对比React Flutter SwiftUI来解释为什么说 Compose 的声明式代码最简洁,有需要的朋友可以借鉴参考下
    2022-08-08

最新评论