美文网首页
Swift 与 Objective-C 旧的不去,新的不来

Swift 与 Objective-C 旧的不去,新的不来

作者: zhongxiaoyue | 来源:发表于2019-09-25 15:46 被阅读0次

    Objective-C

    Objective-C作为iPhone/Mac 应用的主要开发语言,它的发展可以追溯到1980年代.刚出现,就获得了史蒂夫·乔布斯(Steve Jobs)的公司NeXT Computer Inc.的许可,可以开发NeXTStep框架,后来成为许多标志性Apple产品的基础。它基于其他两种语言CSmalltalk,从Smalltalk接收对象语法,从C语言接收非面向对象操作的语法。因此,Objective-C语言的特征之一是它非常成熟,并且已经过几代开发人员的测试。


    Swift

    Swift是Apple于2014年6月首次发布的一种新编程语言。Swift与Objective-C的核心相似,但它具有Objective-C缺少的许多基本功能。

    • 开源: Swift的创造者承认,为了构建一种定义性的编程语言,该技术需要向所有人开放。因此,在成立后的四年内,Swift获得了庞大的支持社区和大量的第三方工具。

    • 安全: 它的语法鼓励您编写简洁一致的代码,有时甚至会变得严格。Swift提供保护措施以防止错误并提高可读性。

    • 快速: Swift是在考虑性能的基础上构建的。它的简单语法和手持功能不仅可以帮助您更快地开发,而且根据苹果的描述,Swift比Objective-C快2.6倍,比Python快8.4倍。


    Swift 与 Objective-C 的对比

    我们将两种语言进行比较,以决定:该使用哪一种语言,Objective-C在哪些地方取得成功,以及哪些优势使Swift排名榜首?我们将在比较中考虑以下因素:

    • 性能
    • 安全
    • 维护
    • 语法
    • 代码复杂度
    • 内存管理
    • 支持动态库
    • 未来发展

    一.性能

    苹果官方网站声称Swift 比Objective-C快2.6倍。但是,一些测试 表明,差异并没有那么明显。Swift和Objective-C都是统计类型化的语言,它们使用相同的 iOS SDK 和高质量的 低级虚拟机 LLVM 编译器。不过还是有一些差异会影响应用程序的性能,我们将在下面进行描述。

    Objective-C
    Objective-C并不是一门快速的语言。主要原因是它使用运行时代码编译,而不是编译时。这意味着当Objective-C对象在代码中调用另一个对象时,将有额外的间接访问。

    Swift
    对于性能敏感的代码,Swift语言是不错的选择。根据许多测试,它显示出FFT算法的性能接近C ++。Swift在Mandelbrot算法方面也胜过C ++。由于Swift仍然是一门年轻的语言,因此我们可以期待更多的改进。


    二.安全

    Swift的宗旨是提高iOS产品的代码安全性。它是作为一门类型安全内存安全的语言而创建的。类型安全性意味着语言本身可以防止类型错误。类型内存安全性的重要性在于,它有助于避免与空指针未初始化的指针相关联的漏洞。这些类型的错误是开发中最常见的错误,很难发现和调试。Swift语言的这些优点使其更具吸引力。

    Objective-C
    Objective-C 中允许使用了空指针。指针是C ++和其他基于C的语言的组成部分,它可能导致安全漏洞。这种公开值的方法使开发人员可以更好地访问数据。指针的作用是处理指针的方式。在Objective-C中,当您尝试使用nil指针调用方法时,什么也没有发生。然后,表达式和一行代码就变成了无操作(NOP)。乍一看,这似乎很有用,因为它不会导致崩溃,但是实际上,它可能是大量错误的来源。NOP导致无法预测的结果,使查找和修复错误的过程变得复杂。

    Swift
    Swift不使用指针。如果您错过了代码中的指针(可能是nil值),则应用程序将崩溃。这种方法使程序员可以快速发现并修复错误。结果,该代码将更加简洁和易于理解。诸如泛型,可选和类型干扰之类的功能使Swift开发的应用程序不太可能包含未注意到的错误。


    三.维护

    在Objective-C中管理文件是非常难受的,因为开发人员必须管理两个单独的文件。尽管Swift需要较少的维护,并且不需要你管理两个文件。但事实上是,Swift自动完成依赖并在文件中执行增量构建

    Objective-C
    由于Objective-C是基于C语言构建的。开发人员必须在Objective-C中维护两个独立的代码文件,以提高应用程序的效率和开发时间。它还需要人工来同步方法名称和注释。

    Swift
    Swift更加容易维护。LLVM编译器和Xmind会自动找出并完成需要的增量构建。然后将Objective-C的头文件(.h)和实现文件(.m)文件组合在一个单独的(.swift)程序代码文件中。


    四.语法

    Apple的研发Swift的目标之一是设计一种简单易懂的语言。Objective-С和Swift的区别在于Swift使用了有助于编写干净代码的所有行业标准。但是,Objective-C因其代码复杂性而臭名昭著。由于增强的可读性和简单的语法,任何熟悉JavaScript,Python或C ++的开发人员都可以快速学习Swift语言。

    Objective-C
    由于Objective-C是基于C语言构建的,因此它具有复杂的代码结构。它包括许多带内部"if"和"else"语句的@符号,行,分号和括号条件。@符号用于区分关键字和类型与C类型。

        const int count = 10;
        double price = 23.55;
        
        NSString *firstMessage = @"Swift is awesome.";
        NSString *secondMessage = @"What do you think?";
        NSString *message = [NSString stringWithFormat:@"%@%@",firstMessage,secondMessage];
        
        NSLog(@"%@",message);
    

    Swift
    Swift如此流行的原因之一是简单的语法,这使得该语言易于读写。与Objective-C的复杂结构相反,Swift避免使用许多@符号,并在括号内使用逗号分隔的参数列表。Swift比Objective-C要编写更少的代码字符串。它使您可以避免错误并创建更简洁的代码。就像许多现代流行语言一样,Swift代码类似于自然语言。

        let count = 10
        let price = 23.55
    
        let firstMessage = "Swift is awesome."
        let secondMessage = "What do you think?"
        var message = firstMessage + secondMessage
    
         print(message)
    

    五.代码复杂度

    为了更好的管理项目代码,你需要更加简洁的代码。你的App的代码行越少,维护和更新就越容易。

    Objective-C
    如果我们仔细看一下Objective-C代码,我们会发现文本字符串非常冗长,需要很多步骤来链接两条信息。开发人员必须使用特殊的字符串令牌,例如%s,%d,%@,并提供用逗号分隔的变量列表来替换每个令牌。使用Objective-C,搞乱变量列表或使用错误的字符串令牌会导致应用崩溃。

    Swift
    Swift需要较少的代码来执行重复的语句和字符串处理。这是由于Swift的功能,例如使用"+"运算符将两个字符串加在一起。Swift使用的字符串插值法不需要记住令牌,因此开发人员可以直接在字符串中插入变量,例如按钮或标签。字符串的这种内插避免了在Objective-C中发生崩溃的常见原因。


    六.内存管理

    Objective-C语言在面向对象的代码本身内部支持自动引用计数(ARC)。问题是它不能作为核心图形访问C代码和其他API。相反,Swift更加统一,其ARC针对面向过程和面向对象做的更加完善。所以,使用Swift语言不太可能出现大量内存泄漏。

    Objective-C
    Objective-C使用Cocoa API中支持的ARC 。ARC是用于Objective-C和Swift语言的功能,无需程序员即可管理内存。问题在于该代码不适用于面向过程的C语言和某些其他API(如Core Graphics)。这会影响内存管理并导致大量内存泄漏。

    Swift
    Swift语言也使用ARC。区别在于,Swift支持所有API的ARC,从而允许类似于Cocoa Touch的简化的内存管理方式。通过使ARC具有面向对象的代码路径,可以解决Objective-C的问题。它节省了开发人员的时间,并帮助他们减少了内存管理。


    七.动态库支持

    动态库是可以链接到应用程序的代码的可执行部分。动态库和静态库之间的区别在于,动态库可以在运行时链接到任何程序。共享代码被加载一次,并且可以被大量程序使用无需重新编译使用此库的应用程序,就可以更新,更改或重新编译此代码。动态库自动包含在AppStore的下载包中。将程序放入内存后,静态库在编译过程的最后一步被链接。因此,如果对外部文件进行了任何更改,则必须重新编译可执行文件。静态库也会与其他更新(例如新的OS版本)一起更新。动态库可以直接在应用程序中更新代码段。

    Objective-C
    Objective-C不支持动态库,这是一个主要缺点。因为外部程序内置在可执行文件中。动态库较小,因为动态库只有一个副本存储在内存中。因此,如果选择使用Objective-C,则应认识到您将忽略Swift语言提供的动态库支持。

    Swift
    Swift支持的动态库被直接加载到应用程序的内存中,并优化了应用程序的性能。与应用程序的直接连接允许它们独立于操作系统进行更新。它有助于使您的解决方案保持最新状态,减小应用程序大小,并加快新内容的加载时间。


    八.未来发展

    Objective-C是iOS开发的第一个也是唯一的语言。Swift进入市场后,Objective-C在苹果世界中排名第二。苹果公司积极地培养未来的Swift用户,并推出使其成为Apple领先语言的功能。

    Objective-C
    许多开发人员不想从Objective-C转向,因为他们已经投入了大量时间来学习它并在其中开发应用程序。Apple尚未提供他们计划放弃对Objective-C的支持的预计日期,但我们可以假设他们永远不会这样做。

    Swift
    Swift是一门新兴的语言,正在迅速发展。它拥有一个充满活力的强大社区,为社区的形成做出了积极贡献。在开发的这个阶段,Swift不仅限于苹果生态系统。它也开始在Linux环境中运行。种种迹象表明,Swift将成为一种非常流行的编程语言。

    相关文章

      网友评论

          本文标题:Swift 与 Objective-C 旧的不去,新的不来

          本文链接:https://www.haomeiwen.com/subject/xwaiuctx.html