Swift 与 Objective-C

Objective-C 历史全解:乔布斯钟爱的语言(追溯 NS 前缀的由来)

开始学习 iOS 开发后,你一定会遇到一门语言:充满方括号的陌生语法,以及 NSString 这类让人摸不着头脑的前缀。

5 分钟阅读
Objective-C 历史全解:乔布斯钟爱的语言(追溯 NS 前缀的由来) 封面图

开始学习 iOS 开发后,你一定会遇到一门语言:充满方括号的陌生语法,以及 NSString 这类让人摸不着头脑的前缀。

它就是 Objective-C。

第一次在遗留代码中遇到它时,很容易疑惑:“这到底是什么语法?”了解它的历史后,代码会呈现出另一番面貌。

先说结论:Objective-C 是 20 世纪 80 年代初在 C 语言之上加入 Smalltalk 对象概念而创建的语言。

那个著名的 NS 前缀来自 NeXTSTEP,也就是史蒂夫·乔布斯创立的 NeXT 公司所使用的操作系统。

这篇文章会带你了解以下内容。

  1. Objective-C 的诞生背景(C + Smalltalk)
  2. NS 前缀的由来及技术原因
  3. 伴随 iPhone 到来的黄金时代
  4. 它在 Swift 时代存续下来的原因

Objective-C 是如何诞生的?

20 世纪 80 年代初,有两位名叫 Brad Cox 和 Tom Love 的工程师。他们有两个目标。

  • C:速度快,但没有面向对象的概念
  • Smalltalk:优雅的面向对象语言,但速度太慢

于是他们提出了 Objective-C:在 C 之上增加一层非常薄的面向对象层,同时完全不修改 C。

Objective-C 是 C 的严格超集。

世界上的所有 C 代码无需修改,就都是有效的 Objective-C 代码。

下面用一小段代码展示它的实际样子。

// 普通 C 代码——也同样是 Objective-C 有效代码
int sum = 1 + 2;

// Objective-C新增的部分: Smalltalk这种形式的消息发送(方括号)
NSString *text = [NSString stringWithFormat:@"合计 %d", sum];

上面两行完全使用 C 语法,下面带方括号的一行就是 Objective-C 新增的全部内容。

它的躯体来自 C,而灵魂——对象模型和消息发送——来自 Smalltalk。方括号语法 [receiver message] 正是从 Smalltalk 继承来的遗产。

你可以把它理解为:在与 C++ 大致相同的时期,用相同的材料(C + 面向对象)做出了完全不同的料理。


NS 前缀是什么意思?

NS 前缀的真相,要从 NeXT 时代说起
NS 前缀的真相,要从 NeXT 时代说起

1985 年,史蒂夫·乔布斯被自己创立的 Apple 赶出了公司。

随后,他创立了 NeXT,而这家公司的操作系统 NeXTSTEP 的官方开发语言正是 Objective-C。

NSStringNSArray中的 NS,就是 NeXTSTEP 的缩写。即使是 2026 年最新的 iPhone 应用代码中,也像化石一样刻着乔布斯在 20 世纪 80 年代末创办的公司名称。

但为什么一定要加前缀?这背后有技术原因。

  • Objective-C 没有命名空间
  • 类名必须在全局范围内唯一,因此同名类会发生冲突
  • 于是形成了添加公司或项目首字母的惯例(Apple 使用 NS,AFNetworking 使用 AF)

Apple 甚至正式规定:两字母前缀由 Apple 保留,第三方应使用三字母前缀。这是用文化习惯弥补语言缺陷的典型案例。

Swift 引入了模块级命名空间,因此不再需要这一惯例。这就是没有 NS 的 StringArray 成为 Swift 时代象征的原因。


伴随 iPhone 到来的黄金时代

1996 年,Apple 以 4 亿美元收购 NeXT,乔布斯时隔 12 年回归。

NeXTSTEP 成为 Mac OS X 的基础,Objective-C 也成为 Apple 的官方语言。

随后,App Store 于 2008 年开放。当时开发 iPhone 应用的语言只有一个:Objective-C。

随着全球开发者涌入,这门做了 20 多年小众语言的技术转眼间成为最热门的语言。

根据 TIOBE 指数,它在 2012 年和 2014 年两度当选“年度编程语言”,还曾升至仅次于 C 和 Java 的第三名。

App Store 刚起步时,大家都用这门语言开发应用
App Store 刚起步时,大家都用这门语言开发应用

Objective-C 现在还在使用吗?

2014 年 Apple 发布 Swift 后,Objective-C 的时代似乎走到了尽头。然而十多年过去了,这门语言依然没有消失。原因有三个。

  1. Apple 系统框架:UIKit 和 Foundation 的根基仍然是 Objective-C,因此 Swift 代码也会通过桥接与它们通信。
  2. 遗留代码库:数百万行代码不可能一夜之间重写,因此维护开发者的需求一直存在。
  3. 运行时的动态特性:可以在运行期间替换方法(方法混 swizzling),因此分析 SDK 仍然依赖这一运行时。

问:现在还需要从头学习 Objective-C 吗?

几乎不会有人用这门语言启动新项目。不过,如果你是需要维护老代码库的 iOS 开发者,至少具备阅读能力会是一项很大的优势。

问:只懂 Swift 可以吗?

新项目开发只掌握 Swift 就够了。不过,了解 NS 的来源以及方括号为何出现,会让你更好地理解 Apple 的框架。


总结

Objective-C 不是一门已经死亡的语言,更像是一位正在准备退休的老兵。它与乔布斯一起在 Apple 之外成长,又随乔布斯回归,最终成为全球市值最高公司的心脏。

在旧代码中遇到 NSString 时,请亲切地看待它。这两个字母承载着 40 年的历史。

参考资料

延伸阅读