在这个SwiftUI漫天飞舞、声明式编程大行其道的2026年,你可能会问:“为什么?为什么要写一本关于Objective-C的书?”
好问题。这就像是在电动车满街跑的时代,突然有人要把一台满身油污的V12内燃机搬上讲台,然后兴致勃勃地教你如何调整化油器。
确实,Objective-C(以下简称OC)已经老了。它老到它的很多语法看起来像是在和编译器吵架;它老到它的方括号 [] 常常让习惯了点语法 . 的新一代程序员感到手指抽筋;它老到苹果在每年的WWDC上都在用Swift一点点地把它埋进历史的尘埃里。
但是,朋友,你听说过“余晖”吗?
OC不仅是一门语言,它是一段传奇。它是乔布斯离开苹果后在NeXT的复仇利剑,它是iPhone改变世界时的幕后功臣。每一个滑动解锁的流畅动画背后,都有一次 objc_msgSend 的疯狂奔跑;每一个App Store奇迹的背后,都有无数个 [retain] 和 [release] 的血泪史。
我们怀念它,不是因为它完美(天哪,它离完美差得远了),而是因为它真实。它让你直面内存的恐惧,它让你理解什么是“动态运行时”的魔法。在Swift那个安全得像婴儿房的世界里待久了,有时候你会想念OC这片狂野的西部荒野——在那里,你可以随心所欲地把一个对象变成另一个对象(isa swizzling),把一个方法换成另一个方法(method swizzling),只要你胆子够大,编译器就不敢管你。
这本书不是为了让你用OC去写下一个抖音(虽然你完全可以),而是为了让你看懂移动开发这座大厦的地基。理解了OC,你就理解了iOS的灵魂。
而且,说实话,我觉得 [receiver message] 这种发消息的写法,有一种古典的、慢条斯理的优雅。就像在微信秒回的时代,偶尔写一封手写的信。
所以,请坐好。我们要发车了。目标:1980年代。
致谢与献词
献给 Brad Cox 和 Tom Love,感谢你们在那个C++刚刚想要统治世界的年代,选择了另一条名叫Smalltalk的小径。
献给 Steve Jobs,感谢你把它带回了苹果。
最重要的是,献给 nil。
在OC里,向 nil 发送消息永远是安全的(它只会默默地返回0),不像某些现代语言里的 Optional,动不动就因为强制解包而崩溃给你看。nil,你是我们最沉默也最温柔的守护者。
也献给所有的iOS开发者,无论你是从MRC时代一路 autorelease 过来的老兵,还是从未见过 *.m 文件的Swift原生代新人。希望这本书能让你会心一笑,或者至少了解一下,你的前辈们当年都在和什么东西搏斗。