Objective-C是什么语言

子凡问答2019-08-21 14:07:25阅读(...)

Objective-C是一种通用、高级、面向对象的编程语言。它扩展了标准的ANSI C编程语言,当前主要支持的编译器有GCC和Clang。 Objective-C的商标权属于苹果公司,也是这个编程语言的主要开发者。

Objective-C 是一种通用、高级、面向对象的编程语言。它扩展了标准的 ANSI C 编程语言,将 Smalltalk 式的消息传递机制加入到 ANSI C 中。当前主要支持的编译器有 GCC 和 Clang。

Objective-C

Objective-C 的商标权属于苹果公司,苹果公司也是这个编程语言的主要开发者。苹果在开发 NeXTSTEP 操作系统时使用了 Objective-C,之后被 OS X 和 iOS 继承下来。现在 Objective-C 与 Swift 是 OS X 和 iOS 操作系统、及与其相关的 API、Cocoa 和 Cocoa Touch 的主要编程语言。

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 开发团队,clang 及 LLVM 成为苹果公司在 GCC 之外的新编译器选择,在 Xcode 4.0 之后均采用 LLVM 作为默认的编译器。最新的 Modern Objective-C 特性也都率先在 Clang 上实现。

Objective-C 是非常“实际”的语言。它用一个很小的、用 C 写成的运行库,使得应用程序的大小增加很少,与此相比,大部分 OO 系统需要极大的运行时虚拟机来执行。ObjC 写成的程序通常不会比其源代码和库(通常无需包含在软件发行版本中)大太多,不会像 Smalltalk 系统,即使只是打开一个窗口也需要大量的容量。由于 Obj-C 的动态类型特征,Obj-C 不能对方法进行内联(inline)一类的优化,使得 Obj-C 的应用程序一般比类似的 C 或 C++程序更大。

Obj-C 可以在现存 C 编译器基础上实现(在 GCC 中,Obj-C 最初作为预处理器引入,后来作为模块存在),而不需要编写一个全新的编译器。这个特性使得 Obj-C 能利用大量现存的 C 代码、库、工具和编程思想等资源。现存 C 库可以用 Obj-C 包装器来提供一个 Obj-C 使用的 OO 风格界面包装。

收藏0个人收藏
走进科技生活方式

评论交流

泪雪默认头像请「登录」后参与评论
  1. 加载中..