1.2 Objective-C语言和它的后继者:Swift
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上?
他这样回答:原因有三个
- 如果大幅度优化ObjC,把很多Swift中的特性添加进去,这对开发者来说是灾难性的,因为他们要对原来的App进行大幅度修改;
- ObjC在很多问题上积重难返,比如它安全上的问题;
- 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相关推荐
- 初学objective c语言4 dealloc
#import <foundation/foudation.h> #import "Init.h" #import "Eyes.h" int mai ...
- 观点:再见Objective C?程序员眼中的Swift
对于苹果开发者来说,如今已经进入了"Swift时代".虽然编程语言Objective C备受喜爱,不过它作为苹果主流编程语言的日子已经所剩无几.随着WWDC开发者大会的落幕,Swi ...
- 认识一下Kotlin语言,Android平台的Swift
今天在CSDN首页偶然看到一个贴子JetBrains正式公布Kotlin 1.0:JVM和Android上更好用的语言 看完后,感觉Kotlin语法非常简洁,有一系列动态语言的特点,Lambda表达式 ...
- 初探swift语言的学习笔记七(swift 的关健词)
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/32133809 转载请注明出处 如果觉得文章对你有所帮助,请通过留言 ...
- 从Go、Swift出发:语言的选择需谨慎
Google于2009年第一次提出了Go的构思,Facebook在去年春天引入了Hack,随后不久Apple也发布了其Swift语言. 在战争中,胜利者写历史书:在科技中,赢的公司都在写编程语言.互联 ...
- Swift语言难度大吗?适不适合零基础学习?
如今人们使用的各式各样的智能手机系统都是不一样的,比如iphone系统就是有Swift语言编写而成的,我们可以在Swift语法当中看到Objective-C.JavaScript.C#.Python等 ...
- C语言/C++初学 问题
编程及C/C++初学者 FAQ 本文原为本人在论坛所发若干帖,意在集中解决新手学习C/C++语言时将遭遇到的各类问题,网友反馈情况良好,集合修订后作为个人作品贴于此处. 本贴主要分析概念原理和解决方 ...
- Swift语言学习(二)
原文链接:http://www.ioswift.org/ 4.0.Swift指南 以上章节主要从整体上介绍了 Swift 的相关知识,从本章开始,我们一步一步学习 Swift ,正式开启 Swift ...
- 从Java/Android到Swift iOS开发:语言与框架对比
今天分享的主题是Java/Android开发人员如何快速上手Swift iOS开发.主要内容如下: WhyFrom Java/Android to Swift Swift语言为什么值得学习? Java ...
最新文章
- 总是听别人说响应式布局,原来这么简单
- javascript函数值的重写
- java jackson json_java – 使用Jackson从JSON获取单个字段
- 汇编复制字符串小程序笔记
- linux fedora安装simplescreenrecorder
- android 简单的音乐播放器
- boost::mpi::wait_all相关用法的测试程序
- Mule学习笔记(二)
- python列表元素替换的数据结构_Python基础学习数据结构(第2讲:列表;第2讲:列表创建、添加元素、插入元素、替换元素、删除元素、其他常用方法和列表派生),第二,主讲,追加,推导,式...
- 闪电shader_【Shader案例】怎样做出自然的闪电
- 在Access中执行SQL语句
- 【Elasticsearch】将 term查询的 integer 字段改成 keyword之后, must 再改成 filter,就造成query_cache剧降
- Visitor模式学习
- 51Nod-1002 数塔取数问题【DP】
- TestNG套件测试
- OpenCV-特征提取与检测(02、Shi-Tomasi角点检测)
- MySQL 高阶语句之函数存储
- android自动扫码转账,亿乐社区微信扫码转账加款机器人使用教程以及常见问题...
- 从视觉AI应用案例,看AI落地的瓶颈在哪里?
- vue动态绑定背景图片