Objective-C:修订间差异
TeodoroSeccombe(留言 | 贡献) 小 创建页面,内容为“。” |
IdleTap-bot(留言 | 贡献) 由旧格式Infobox转换为新参数格式(label/data),修复空信息框(由IdleTap-bot执行) |
||
| 第1行: | 第1行: | ||
{{ | {{Infobox | ||
| title = Objective-C | |||
| label1 = 中文名 | |||
| data1 = 扩充C的面向对象编程语言 | |||
| label2 = 英文名 | |||
| data2 = Objective-C | |||
| | |||
| label3 = 简称 | |||
| data3 = ObjC、OC | |||
= | | label4 = 设计者 | ||
| data4 = 布莱德·考克斯(Brad Cox)、Tom Love | |||
| label5 = 设计公司 | |||
| data5 = Stepstone(原 Productivity Products International) | |||
| label6 = 面市时间 | |||
| data6 = 1980年代 | |||
| label7 = 当前版本 | |||
| data7 = | |||
| label8 = 主要实现产品 | |||
| data8 = Clang、GCC | |||
| label9 = 受其影响 | |||
| data9 = Smalltalk、C | |||
| label10 = 影响语言 | |||
| data10 = Swift、Java(部分特性) | |||
| label11 = 操作系统 | |||
| data11 = macOS、iOS、Linux(通过GNUstep)等 | |||
| label12 = 网站 | |||
| data12 = [https://developer.apple.com/ Apple Developer] | |||
}}'''Objective-C'''(常缩写为 '''ObjC''' 或 '''OC''')是一种通用、高级、面向对象的[[编程]]语言,它在标准 ANSI C 语言之上扩展了 Smalltalk 风格的消息传递机制<ref name="[[apple]]_intro">[https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html Apple Inc. "Programming with Objective-C", Introduction]</ref>。该语言是[[苹果公司]] [[macOS]]、[[iOS]] 及其相关 API(Cocoa 与 Cocoa Touch)的主要开发语言,直至 2014 年 Swift 语言问世。Objective-C 由布莱德·考克斯(Brad Cox)和 Tom Love 于 1980 年代初发明<ref name="cox_book">Cox, Brad J. (1986). ''Object-Oriented Programming, An Evolutionary Approach''. Addison-Wesley. ISBN 978-020[[110]]3939.</ref>,后被 NeXT 公司选为其 NeXTSTEP [[操作系统]]的核心开发语言。目前 Objective-C 的商标权归苹果公司所有,苹果也是该语言的主要维护者<ref name="apple_license">[https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html Apple Inc. "About Objective-C" (archived)]</ref>。 | |||
== 历史 == | |||
Objective-C 的起源可追溯至 1980 年左右,当时布莱德·考克斯和 Tom Love 在 ITT 实验室工作,他们受到 Smalltalk 语言的启发,希望将动态消息传递机制引入 C 语言,以提升工程系统的可复用性<ref name="[[wiki]]_history">[[wikipedia:Objective-C#History|Wikipedia: Objective-C – History]]</ref>。考克斯编写了一个 C 语言的预处理器,为 C 增加了面向对象特性,这便是 Objective‑C 的雏形<ref name="cox_preprocessor">Cox, Brad. "The Objective-C Language: An Introduction" (1983).</ref>。 | |||
1983 年,考克斯与 Love 共同创立了 Productivity Products International(PPI)公司,后更名为 Stepstone,将 Objective‑C 及其类库商业化<ref name="stepstone">[[wikipedia:Objective-C#Early_development|Wikipedia: Objective-C – Early development]]</ref>。1986 年,考克斯出版了《Object‑Oriented Programming, An Evolutionary Approach》一书,系统阐述了该语言的设计哲学<ref name="cox_book" />。 | |||
1988 年,史蒂夫·乔布斯创办的 NeXT 公司从 Stepstone 获得 Objective‑C 授权,并扩展了 GCC 编译器以支持该语言。NeXT 基于 Objective‑C 开发了 AppKit 和 Foundation Kit,作为 NeXTSTEP 操作系统的基础开发框架<ref name="next">[[wikipedia:Objective-C#NeXT_and_Apple|Wikipedia: Objective-C – NeXT and Apple]]</ref>。尽管 NeXT 硬件并未取得商业成功,但其[[软件]]工具在业界影响深远。 | |||
1992 年,[[GNU]] 项目增加了对 Objective‑C 的支持<ref name="gnu">[https://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Objective-C.html GCC online documentation – Objective-C]</ref>。1994 年 NeXT 与 Sun 联合发布了 OPENSTEP 标准。1996 年苹果公司收购 NeXT,NeXTSTEP/OPENSTEP 成为 macOS 的基础,其开发环境被命名为 Cocoa<ref name="apple_acquisition">[[wikipedia:Objective-C#NeXT_and_Apple|Wikipedia: Objective-C – NeXT and Apple]]</ref>。2005 年起,苹果逐步引入 LLVM 和 Clang,以取代 GCC 成为官方编译器<ref name="clang">[https://clang.llvm.org/ Clang project website]</ref>。 | |||
== | == 语法 == | ||
Objective‑C 是 C 语言的严格超集,任何 C 代码均可在 Objective‑C 编译器中直接通过编译<ref name="apple_intro" />。其面向对象语法源自 Smalltalk 的消息传递范式,而非 [[C++]] 的静态函数调用。非面向对象部分(如类型、流程控制、函数声明)与 C 完全一致。 | |||
=== | === 消息传递 === | ||
对象方法的调用不是传统的函数调用,而是“消息发送”(Message Sending)。编译器将方法调用转换为 `objc_msgSend` 等运行时函数,由运行时系统动态解析目标方法<ref name="runtime">[https://developer.apple.com/documentation/objectivec/objective-c_runtime Apple Developer: Objective-C Runtime]</ref>。这种动态绑定赋予语言极高的灵活性,支持方法交换(Method Swizzling)等高级特性<ref name="runtime" />。 | |||
=== | === 接口与实现 === | ||
类的声明(接口)与实现分离。接口在 `.h` 文件中使用 `@interface` 指令,声明属性和方法;实现在 `.m` 文件中使用 `@implementation` 指令提供具体代码<ref name="apple_intro" />。这种分离方式有利于隐藏实现细节。 | |||
== | == 运行时系统 == | ||
Objective‑C 拥有一个强大的运行时(Runtime)系统,负责消息分发、动态类型识别、类与对象的创建及方法解析<ref name="runtime" />。运行时 API 是 Cocoa 和 Cocoa Touch 中诸多设计模式(如委托、目标‑动作)的底层支撑。所有类均继承自 `NSObject`,该类定义了与运行时交互的基本接口<ref name="nsobject">[https://developer.apple.com/documentation/objectivec/nsprotocol Apple Developer: NSObject]</ref>。 | |||
== | == 使用情况 == | ||
Objective‑C 是苹果平台(iOS、macOS、tvOS、watchOS)应用程序开发的主要语言,其普及程度与 iPhone 及 iOS 生态系统的成功密切相关<ref name="tiobe_2013">[https://www.tiobe.com/tiobe-index/ TIOBE Index (historical data, 2013)]</ref>。在 2013 年,Objective‑C 曾位列 TIOBE [[编程语言]]排行榜第三名<ref name="tiobe_2013" />。 | |||
2014 年苹果发布 Swift 语言,并积极推广其作为 Objective‑C 的继任者。然而,Objective‑C 的存量代码库依然庞大,苹果也保持对 Objective‑C 的持续支持,且两种语言可在同一项目中无缝互操作<ref name="swift_interop">[https://developer.apple.com/documentation/swift/imported_c_and_objective-c_apis Apple Developer: Swift and Objective-C Interoperability]</ref>。目前 Objective‑C 仍在苹果生态系统中扮演重要角色,特别是在维护历史项目或使用未更新至 Swift 的第三方框架时<ref name="current_status">[https://www.tiobe.com/tiobe-index/ TIOBE Index (current trends)]</ref>。 | |||
== 参考文献 == | == 参考文献 == | ||
<references /> | <references /> | ||
2026年8月11日 (二) 10:14的最新版本
| 中文名 | 扩充C的面向对象编程语言 |
|---|---|
| 英文名 | Objective-C |
| 简称 | ObjC、OC |
| 设计者 | 布莱德·考克斯(Brad Cox)、Tom Love |
| 设计公司 | Stepstone(原 Productivity Products International) |
| 面市时间 | 1980年代 |
| 主要实现产品 | Clang、GCC |
| 受其影响 | Smalltalk、C |
| 影响语言 | Swift、Java(部分特性) |
| 操作系统 | macOS、iOS、Linux(通过GNUstep)等 |
| 网站 | Apple Developer |
Objective-C(常缩写为 ObjC 或 OC)是一种通用、高级、面向对象的编程语言,它在标准 ANSI C 语言之上扩展了 Smalltalk 风格的消息传递机制[1]。该语言是苹果公司 macOS、iOS 及其相关 API(Cocoa 与 Cocoa Touch)的主要开发语言,直至 2014 年 Swift 语言问世。Objective-C 由布莱德·考克斯(Brad Cox)和 Tom Love 于 1980 年代初发明[2],后被 NeXT 公司选为其 NeXTSTEP 操作系统的核心开发语言。目前 Objective-C 的商标权归苹果公司所有,苹果也是该语言的主要维护者[3]。
Objective-C 的起源可追溯至 1980 年左右,当时布莱德·考克斯和 Tom Love 在 ITT 实验室工作,他们受到 Smalltalk 语言的启发,希望将动态消息传递机制引入 C 语言,以提升工程系统的可复用性[4]。考克斯编写了一个 C 语言的预处理器,为 C 增加了面向对象特性,这便是 Objective‑C 的雏形[5]。
1983 年,考克斯与 Love 共同创立了 Productivity Products International(PPI)公司,后更名为 Stepstone,将 Objective‑C 及其类库商业化[6]。1986 年,考克斯出版了《Object‑Oriented Programming, An Evolutionary Approach》一书,系统阐述了该语言的设计哲学[2]。
1988 年,史蒂夫·乔布斯创办的 NeXT 公司从 Stepstone 获得 Objective‑C 授权,并扩展了 GCC 编译器以支持该语言。NeXT 基于 Objective‑C 开发了 AppKit 和 Foundation Kit,作为 NeXTSTEP 操作系统的基础开发框架[7]。尽管 NeXT 硬件并未取得商业成功,但其软件工具在业界影响深远。
1992 年,GNU 项目增加了对 Objective‑C 的支持[8]。1994 年 NeXT 与 Sun 联合发布了 OPENSTEP 标准。1996 年苹果公司收购 NeXT,NeXTSTEP/OPENSTEP 成为 macOS 的基础,其开发环境被命名为 Cocoa[9]。2005 年起,苹果逐步引入 LLVM 和 Clang,以取代 GCC 成为官方编译器[10]。
Objective‑C 是 C 语言的严格超集,任何 C 代码均可在 Objective‑C 编译器中直接通过编译[11]。其面向对象语法源自 Smalltalk 的消息传递范式,而非 C++ 的静态函数调用。非面向对象部分(如类型、流程控制、函数声明)与 C 完全一致。
对象方法的调用不是传统的函数调用,而是“消息发送”(Message Sending)。编译器将方法调用转换为 `objc_msgSend` 等运行时函数,由运行时系统动态解析目标方法[12]。这种动态绑定赋予语言极高的灵活性,支持方法交换(Method Swizzling)等高级特性[12]。
类的声明(接口)与实现分离。接口在 `.h` 文件中使用 `@interface` 指令,声明属性和方法;实现在 `.m` 文件中使用 `@implementation` 指令提供具体代码[11]。这种分离方式有利于隐藏实现细节。
Objective‑C 拥有一个强大的运行时(Runtime)系统,负责消息分发、动态类型识别、类与对象的创建及方法解析[12]。运行时 API 是 Cocoa 和 Cocoa Touch 中诸多设计模式(如委托、目标‑动作)的底层支撑。所有类均继承自 `NSObject`,该类定义了与运行时交互的基本接口[13]。
Objective‑C 是苹果平台(iOS、macOS、tvOS、watchOS)应用程序开发的主要语言,其普及程度与 iPhone 及 iOS 生态系统的成功密切相关[14]。在 2013 年,Objective‑C 曾位列 TIOBE 编程语言排行榜第三名[14]。
2014 年苹果发布 Swift 语言,并积极推广其作为 Objective‑C 的继任者。然而,Objective‑C 的存量代码库依然庞大,苹果也保持对 Objective‑C 的持续支持,且两种语言可在同一项目中无缝互操作[15]。目前 Objective‑C 仍在苹果生态系统中扮演重要角色,特别是在维护历史项目或使用未更新至 Swift 的第三方框架时[16]。
- ↑ Apple Inc. "Programming with Objective-C", Introduction
- ↑ 2.0 2.1 Cox, Brad J. (1986). Object-Oriented Programming, An Evolutionary Approach. Addison-Wesley. ISBN 978-0201103939.
- ↑ Apple Inc. "About Objective-C" (archived)
- ↑ Wikipedia: Objective-C – History
- ↑ Cox, Brad. "The Objective-C Language: An Introduction" (1983).
- ↑ Wikipedia: Objective-C – Early development
- ↑ Wikipedia: Objective-C – NeXT and Apple
- ↑ GCC online documentation – Objective-C
- ↑ Wikipedia: Objective-C – NeXT and Apple
- ↑ Clang project website
- ↑ 11.0 11.1 引用错误:
<ref>标签无效;未给name(名称)为apple_intro的ref(参考)提供文本 - ↑ 12.0 12.1 12.2 Apple Developer: Objective-C Runtime
- ↑ Apple Developer: NSObject
- ↑ 14.0 14.1 TIOBE Index (historical data, 2013)
- ↑ Apple Developer: Swift and Objective-C Interoperability
- ↑ TIOBE Index (current trends)