第一章:那只薛定谔的猫 —— OC的诞生

1.1 C语言的狂野与Smalltalk的优雅

故事开始于1980年代初。那是一个计算机还在穿纸尿裤的年代。

当时,C语言 就像是那个拿着电锯的德州杀人狂——强大、高效、但也极其危险。它能让你直接操作内存,能让你写出极快的代码,但也能让你因为一个野指针而让整个系统崩溃。

而在另一个平行宇宙里,施乐(Xerox)帕罗奥多研究中心(PARC)的一群天才们搞出了 Smalltalk。Smalltalk 就像是一个优雅的芭蕾舞者,它不仅是一门语言,更是一个完整的环境。在它的世界里,一切皆对象,一切皆消息。它不用你操心内存,不用你关心底层,你只需要对着对象喊:“嘿,跳个舞!”,它就会跳个舞。

这时候,有两个叫 Brad CoxTom Love 的哥们出现了。他们看着C语言,又看着Smalltalk,心里产生了一个大胆(甚至有点变态)的想法:

“如果我们把Smalltalk的消息机制,嫁接到C语言的身上,会生出一个什么怪胎……啊不,天才?”

于是,Objective-C 就在这种“杂交”实验中诞生了。它不是一门全新的语言,它严格来说是 C 语言的一个 超集。 也就是说,任何合法的 C 语言代码,都是合法的 Objective-C 代码

这就像是:你本来只会骑自行车(C语言),突然有人给你的自行车装了一个甚至能飞的火箭助推器(Smalltalk的运行时),但你依然可以像骑自行车一样踩脚踏板。

1.2 NeXT:被流放国王的复仇之剑

如果OC只是Brad Cox的一个实验品,它可能早就淹没在历史的垃圾堆里了。让它真正加冕为王的,是一个被自己创立的公司踢出门的男人——Steve Jobs

Jobs 被赶出苹果后,创立了 NeXT。他想造一台完美的电脑,这台电脑不仅要有完美的硬件,还要有完美的软件。他需要一个强大的操作系统,和一套能让开发者快速开发出漂亮GUI程序的开发工具。

他看上了 Objective-C。

在那个年代,写GUI程序简直是刑罚。你得处理几千行的C代码来画一个窗口。但是用OC,配合NeXT开发的 Interface Builder(是的,它那时候就叫这个),你可以像搭积木一样拖拽按钮、窗口,然后用简单的 [window makeKeyAndOrderFront:self] 这种像英语一样的代码来控制它。

NeXTSTEP 操作系统诞生了。它优雅、先进、完全面向对象。它是乔布斯的复仇之剑。

1.3 如果你觉得现在的Xcode难用……

回想一下当初的开发环境。那时候没有自动补全,没有ARC,没有StackOverflow。 开发者们靠着名为 Project Builder(Xcode的前身)和 Interface Builder 的双剑合璧,在NeXTSTEP上创造了一个又一个奇迹。

比如 WorldWideWeb —— 世界上第一个Web浏览器,就是蒂姆·伯纳斯-李(Tim Berners-Lee)在NeXT电脑上用Objective-C写出来的。 是的,没有OC,就没有现在的互联网。(好的,这有点夸张,但它确实加速了 Web 的诞生。)

1.4 总结

OC 的出生,带着一种“实用主义的缝合怪”气质。 它不像 C++ 那样试图重新发明轮子(然后造出了一个正十二面体轮子),它极其简单粗暴:

  1. 保留 C 的一切(指针、结构体、宏)。
  2. 引入 Smalltalk 的面向对象运行时。
  3. 用一对方括号 [] 把它们强行把它们箍在一起。

这种“简单的暴力美学”,贯穿了 OC 的一生。

使用 Hugo 构建
主题 StackJimmy 设计