1.2 Objective-C语言和它的后继者:Swift

青出于蓝而胜于蓝

冰凝于水而寒于水

1981年Brad Cox和Tom Love还在ITT公司任职时,接触到了SmallTalk语言,于是Cox写了一个C语言处理器,他们打算使C语言融入一些Smalltalk的优良基因。很快一个可用的C语言扩展诞生了,它就是Objective-C语言的前身。

1988年Steve Jobs离开苹果公司后成立了NeXT公司,NeXT买下了Objective-C语言的授权,并扩展了著名的开源编译器GCC使之支持Objective-C的编译。正是在那时,NeXT用Objective-C编写了后来Apple操作系统的底层库: AppKit和Fundation。

Objective-C又称ObjC或OC语言,是对C语言面向对象的扩充,不同于C++,Objective-C对于C的扩充属于轻量级的,这使得ObjC语言本身要比C++简单的多。

很多人觉得Objective-C的语法十分怪异,这是由于它传承于Smalltalk语言的缘故:

#import <Foundation/Foundation.h>// 类Box的接口定义
@interface Box:NSObject{int l;int w;
}@property int l,w;
-(void)print;
@end// 类Box的实现
@implementation Box
@synthesize l,w;-(void)print{NSLog(@"l=%d,w=%d",l,w);
}
@end// 创建Box实例对象
Box *box = [[Box alloc] init];
// 调用Box实例方法
[box print];

虽然从某些方面来看,Objective-C很像C语言,但骨子里ObjC却是一个完全的动态语言,其内部对方法的调用全部采用发送消息的机制,这使得ObjC灵活度非常高。

GCC与Clang都含有Objective-C编译器,Objective-C可以在GCC以及Clang运作的系统上编译。除此之外,Objective-C还包含一个非常简单的垃圾回收机制:ARC。

Objective-C的流行归功于iPhone的成功,或者反过来说也没有错。因为在当时,编写iPhone应用程序的主要编程语言是Objective-C。

其实Objective-C也是一门非常优秀的语言,不过它毕竟“年纪”有点大,无论是语言简洁性或是对新特性的支持上来说,都有点落伍。比如说它“蹩脚”的语法、Runtime的各种黑魔法以及不支持命名空间等诸多瑕疵。

Objective-C从诞生到现在几十年一共才迭代2个版本,而Swift短短几年就已经5个大版本了,小版本更是不计其数。

Swift语言之父、LLVM之父以及clang主要开发者Chris Lattner曾被问及这样一个问题:

为什么要开发Swift语言,而不是把精力花在优化Objective-C上?

他这样回答:原因有三个

  1. 如果大幅度优化ObjC,把很多Swift中的特性添加进去,这对开发者来说是灾难性的,因为他们要对原来的App进行大幅度修改;
  2. ObjC在很多问题上积重难返,比如它安全上的问题;
  3. ObjC是基于C开发的语言,所以无论怎么优化,它也还是必然有C语言自身的缺陷。

做一件事情最好是十年前,其次是现在;如果说十年前做Apple开发当仁不让的选择是Objective-C的话,那么现在Swift语言就是一个非常明智的选择了。

简单来说,Swift有如下优势:

1.Swift更简洁、更易于阅读、所需代码更少

正如你所能预计到在一门基于 C 构建的语言上,Objective-C 所有的弊端都有。

而Swift 丢弃了遗留下来的约定,因而你不再需要行尾的分号,以及 if/else 语句中围绕条件表达式的括弧。Swift中方法调用不再出现互相嵌套中括号的深坑 (再见吧,[[[ ]]]),调用更像是自然的英语 – 一点也不像 Objective-C 这只大笨象。

一个非常明显的结果是,对于相同功能的代码,Swift需要的代码行数远远少于ObjC。代码越少,出错可能性自然越低。

2.Swift更加安全

不像ObjC,Swift是一门类型安全的语言,这意味着Swift会杜绝代码中类型不一致的情况出现。

因为ObjC相对更加底层,所以对诸如指针之类对象的使用更需小心翼翼。而Swift从语言层面帮你避免在托管情况下访问底层内容(当然非托管下也是可以的),极大的防止了“低级错误”的发生。

而对于ObjC中棘手nil值的处理,Swift提出了可选值的概念,完美避开风险,进一步增加了语言的安全性。

3.Swift内存管理更加统一

Swift 以一种 Objective-C 前所未有的方式对内存管理进行了统一,对自动引用计数 (ARC) 的支持是在整个过程化和面向对象的代码路径上完成的。

在ObjC中在使用 Core Graphics API 以及其它 iOS 上的底层 API 时,内存管控的处理都是程序员的责任,而在Swift中会将其调用进行安全封装,程序员在 Objective-C 上会遇到的大量内存溢出问题在 Swift 上是不可能的。

4.Swift更快

删除遗留下来的C语言约定大大提升了引擎之下Swift的性能. 苹果公司一直都在致力于Swift代码运行速度的提升。

苹果公司从一开始就力图将Swift打造成一门极具效率、迅捷的语言,ObjC 和 Swift 语言在 Richards 上评测的结果显示,Swift 比 OC 快了4倍,Swift同OC相比会更快。

5.Swift会有更少的命名冲突

Objective-C 代码中一直令人很困扰的问题就是缺乏对命名空间的正式支持, 它是 C++ 处理文件名冲突的解决方案。当名称冲突发生在 Objective-C 中时,就会是一个链接器错误,会导致 app 无法运行。

而Swift提供了隐含的命名空间,允许相同的代码文件存在于多个项目,而不会造成构建失败,或者需要像 NSString (源自NextStep系统) 或者 CGPoint (Core Graphics)这样的怪异名称。

Swift 中的这一特性使得开发者更加具有生产力,在简单如 Array,Dictionary 以及 String 这样的名字中你可以看到 Swift 的简洁魅力所在,而不是脱胎于缺少命名空间的 Objective-C 中的 NSArray、NSDictionary 以及 NSString这样冗余的名字。

6.Swift的Playground更易于编写原型代码

作为快速编写原型或测试来说,没有比Swift中的Playground更给力的了,这在Objective-C中几乎是束手无策的事。

类似于Ruby中的irb环境,Playground就像一个设备齐全的实验室,任你在其中做任何快速和安全的实验,无论是代码原型、性能、数据库或是界面布局的测试都没问题,而且这在iPad中也可以使用。

7.Swift是一门面向未来朝气蓬勃的语言

从Apple公司的行动和出牌中可以看出,Swift是其力捧的一门语言,虽然说ObjC在未来一段时间里都还将存在,但Swift无疑会成为开发中更优秀的核心力量。

现在无论是从语言规范上还是社区的建设来看,Swift越来越显得成熟和稳健,相信今后在苹果平台乃至其他第三方平台(Swift支持Linux,最新已开始支持Windows平台)的开发中,Swift语言将会是当仁不让的超级巨星。

Swift语言能够一步步成为当今Apple开发中的绝对主角,绝非一朝一夕之功,接下来就让我们了解一下Swift的成长历程吧。

1.2 Objective-C语言和它的后继者:Swift相关推荐

  1. 初学objective c语言4 dealloc

    #import <foundation/foudation.h> #import "Init.h" #import "Eyes.h" int mai ...

  2. 观点:再见Objective C?程序员眼中的Swift

    对于苹果开发者来说,如今已经进入了"Swift时代".虽然编程语言Objective C备受喜爱,不过它作为苹果主流编程语言的日子已经所剩无几.随着WWDC开发者大会的落幕,Swi ...

  3. 认识一下Kotlin语言,Android平台的Swift

    今天在CSDN首页偶然看到一个贴子JetBrains正式公布Kotlin 1.0:JVM和Android上更好用的语言 看完后,感觉Kotlin语法非常简洁,有一系列动态语言的特点,Lambda表达式 ...

  4. 初探swift语言的学习笔记七(swift 的关健词)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/32133809 转载请注明出处 如果觉得文章对你有所帮助,请通过留言 ...

  5. 从Go、Swift出发:语言的选择需谨慎

    Google于2009年第一次提出了Go的构思,Facebook在去年春天引入了Hack,随后不久Apple也发布了其Swift语言. 在战争中,胜利者写历史书:在科技中,赢的公司都在写编程语言.互联 ...

  6. Swift语言难度大吗?适不适合零基础学习?

    如今人们使用的各式各样的智能手机系统都是不一样的,比如iphone系统就是有Swift语言编写而成的,我们可以在Swift语法当中看到Objective-C.JavaScript.C#.Python等 ...

  7. C语言/C++初学 问题

    编程及C/C++初学者 FAQ  本文原为本人在论坛所发若干帖,意在集中解决新手学习C/C++语言时将遭遇到的各类问题,网友反馈情况良好,集合修订后作为个人作品贴于此处. 本贴主要分析概念原理和解决方 ...

  8. Swift语言学习(二)

    原文链接:http://www.ioswift.org/ 4.0.Swift指南 以上章节主要从整体上介绍了 Swift 的相关知识,从本章开始,我们一步一步学习 Swift ,正式开启 Swift ...

  9. 从Java/Android到Swift iOS开发:语言与框架对比

    今天分享的主题是Java/Android开发人员如何快速上手Swift iOS开发.主要内容如下: WhyFrom Java/Android to Swift Swift语言为什么值得学习? Java ...

最新文章

  1. 总是听别人说响应式布局,原来这么简单
  2. javascript函数值的重写
  3. java jackson json_java – 使用Jackson从JSON获取单个字段
  4. 汇编复制字符串小程序笔记
  5. linux fedora安装simplescreenrecorder
  6. android 简单的音乐播放器
  7. boost::mpi::wait_all相关用法的测试程序
  8. Mule学习笔记(二)
  9. python列表元素替换的数据结构_Python基础学习数据结构(第2讲:列表;第2讲:列表创建、添加元素、插入元素、替换元素、删除元素、其他常用方法和列表派生),第二,主讲,追加,推导,式...
  10. 闪电shader_【Shader案例】怎样做出自然的闪电
  11. 在Access中执行SQL语句
  12. 【Elasticsearch】将 term查询的 integer 字段改成 keyword之后, must 再改成 filter,就造成query_cache剧降
  13. Visitor模式学习
  14. 51Nod-1002 数塔取数问题【DP】
  15. TestNG套件测试
  16. OpenCV-特征提取与检测(02、Shi-Tomasi角点检测)
  17. MySQL 高阶语句之函数存储
  18. android自动扫码转账,亿乐社区微信扫码转账加款机器人使用教程以及常见问题...
  19. 从视觉AI应用案例,看AI落地的瓶颈在哪里?
  20. vue动态绑定背景图片

热门文章

  1. DataSketches HLL Sketch module
  2. 给定激励,求零输入响应、零状态响应,全响应
  3. 无线网络技术测试试题(四)
  4. OpenCV图像处理——把图像指定颜色变成透明
  5. windows 10 输入法如何关掉繁体切换
  6. 关于Android app正式版本和测试版本的切换
  7. APIcloud开发——生成IOS系统测试版证书步骤详解
  8. websocket自动重连
  9. OpenPAI1.3.0 部署
  10. JDK1.8+Spring5+SpringMVC5+Mybatis3.4项目(SMM框架)搭建