49aae89b7f7b3a0e1976da88e93e6f7f
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。

图1 Objective-C 编程语

图1 Objective-C 编程语

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 代码示例

虽然从某些方面来看,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曾被问及这样一个问题:

top Created with Sketch.