• 1.摘要
  • 2.基本信息
  • 3.发展历史
  • 3.1.早期发展
  • 3.2.版本迭代
  • 4.语言特点
  • 4.1.基本特点
  • 4.2.消息传递
  • 4.3.异同
  • 4.4.优缺点
  • 5.HelloWord
  • 6.应用范围
  • 7.争议
  • 8.参考资料

Objective-C

Objective-C是一种主要由Stepstone公司的布莱德·考克斯(Brad Cox)和 汤姆·洛夫(Tom Love)发明的通用、高级、面向对象的编程语言,与Swift是OSX和iOS操作系统、及与其相关的API、Cocoa和Cocoa Touch的主要编程语言。

Objective-C是C语言的超集,并且在提供了动态类型和延迟到运行时的绑定的同时,为对象图形管理和对象字面提供了语言层面上的支持。Objective-C扩展了标准的ANSIC编程语言,将Smalltalk式的消息传递机制加入到ANSIC中。

Objective-C当前主要支持的编译器有GCC和Clang(采用LLVM作为后端)。

基本信息

  • 中文名

    扩充C的面向对象编程语言

  • 外文名

    Objective-C

  • 简写

    ObjC&OC

  • 适用领域

    计算机

  • 创始人

    布莱德·考克斯

发展历史

早期发展

Objective-C 主要由 Stepstone 公司的布莱德·考克斯(Brad Cox)和 汤姆·洛夫(Tom Love) 在 1980 年代发明。

1981年 Brad Cox 和 Tom Love 还在 ITT 公司技术中心任职时,接触到了 SmallTalk语言。Cox 当时对软件设计和开发问题非常感兴趣,他很快地意识到 SmallTalk语言 在系统工程构建中具有无法估量的价值,但同时他和 Tom Love 也明白,当前 ITT 公司的电子通信工程相关技术中,C 语言被放在很重要的位置。

于是 Cox 撰写了一个 C 语言的预处理器,打算使 C 语言具备些许 Smalltalk 的本领。Cox 很快地实现了一个可用的 C 语言扩展,此即为 Objective-C语言的前身。到了 1983 年,Cox 与 Love 合伙成立了 Productivity Products International(PPI)公司,将 Objective-C 及其相关库商品化贩售,并在之后将公司改名为StepStone。1986年,Cox 出版了一本关于 Objective-C 的重要著作《Object-Oriented Programming, An Evolutionary Approach》,书内详述了 Objective-C 的种种设计理念。

1988年,斯蒂夫·乔布斯(Steve Jobs)离开苹果公司后成立了 NeXT Computer 公司,NeXT 公司买下 Objective-C 语言的授权,并扩展了著名的开源编译器GCC 使之支持 Objective-C 的编译,基于 Objective-C 开发了 AppKit 与 Foundation Kit 等库,作为 NeXTSTEP 的的用户界面与开发环境的基础。虽然 NeXT 工作站后来在市场上失败了,但 NeXT 上的软件工具却在业界中被广泛赞扬。这促使 NeXT 公司放弃硬件业务,转型为销售NeXTStep(以及OpenStep)平台为主的软件公司。

1992年,自由软件基金会的 GNU 开发环境增加了对 Objective-C 的支持。1994年,NeXT Computer公司和Sun Microsystem联合发布了一个针对 NEXTSTEP 系统的标准典范,名为 OPENSTEP。OPENSTEP 在自由软件基金会的实现名称为 GNUstep。1996年12月20日,苹果公司宣布收购 NeXT Software 公司,NEXTSTEP/OPENSTEP环境成为苹果操作系统下一个主要发行版本OS X的基础。这个开发环境的版本被苹果公司称为Cocoa。

2005年,苹果电脑雇用了克里斯·拉特纳及LLVM开发团队[2],clang及LLVM成为苹果公司在GCC之外的新编译器选择,在 Xcode 4.0之后均采用 LLVM 作为默认的编译器。最新的 Modern Objective-C 特性也都率先在 Clang 上实现。

版本迭代

Objective-C++

Objective-C++是GCC的一个前端,它可以编译混合了C++与Objective-C语法的源文件。Objective-C++是C++的扩展,类似于Objective-C是C的扩展。由于在融合C++与Objective-C两种语言的特性方面没有做特别的工作,因此有以下限制:

·C++类不能从Objective-C类继承,反之亦然。

·Objective-C定义内部不能定义C++名字空间。

·Objective-C类的成员变量不能包括不含默认构造函数和/或含有虚方法的C++类对象,但使用C++类指针并无如此限制(可以在 -init方法中对之进行初始化)。

·C++“传递值”的特性不能用在Objective-C对象上,而只能传递其指针。

·Objective-C声明不能存在在C++模板声明中,反之亦然。但Objective-C类型可以用在C++模板的参数中。

·Objective-C和C++的错误处理语句不同,各自的语句只能处理各自的错误。

·Objective-C错误使得C++对象被退出时,C++析构函数不会被调用。新的64位运行时解决了这个问题。

Objective-C 2.0