Objective-C
Objective-C,通常寫作 ObjC 和較少用的 Objective C 或 Obj-C,是擴(kuò)充 C 的面向?qū)ο缶幊陶Z言。它主要使用于 Mac OS X 和 GNUstep 這兩個(gè)使用 OpenStep 標(biāo)準(zhǔn)的系統(tǒng),而在 NeXTSTEP 和 OpenStep 中它更是基本語言。Objective-C 可以在 gcc 運(yùn)作的系統(tǒng)寫和編譯,因?yàn)?gcc 含 Objective-C 的編譯器。
Objective-C 是非常「實(shí)際」的語言。它使用一個(gè)用 C 寫成、很小的運(yùn)行庫,只會令應(yīng)用程序的大小增加很小,和大部分 OO 系統(tǒng)使用極大的 VM 執(zhí)行時(shí)間會取代了整個(gè)系統(tǒng)的運(yùn)作相反。ObjC 寫成的程序通常不會比其原始碼大很多。而其函式庫(通常沒附在軟件發(fā)行本)亦和 Smalltalk 系統(tǒng)要使用極大的存儲器來開啟一個(gè)窗口的情況相反。
Objective-C 的最初版本并不支持垃圾回收。在當(dāng)時(shí)這是爭論的焦點(diǎn)之一,很多人考慮到 Smalltalk 回收時(shí)有漫長的「死亡時(shí)間」,令整個(gè)系統(tǒng)失去功用。Objective-C 為避免此問題才不擁有這個(gè)功能。雖然某些第三方版本已加入這個(gè)功能(尤是 GNUstep), Apple 在其 Mac OS X 10.3中仍未引入這個(gè)功能。
另一個(gè)問題是 ObjC 不包括命名空間機(jī)制(namespace mechanism)。取而代之的是程序設(shè)計(jì)師必須在其類別名稱加上前綴,時(shí)常引致沖突。在2004年,在 Cocoa 編程環(huán)境中,所有 Mac OS X 類別和函式均有「NS」作為前綴,例如 NSObject 或 NSButton 來清楚分辨它們屬于 Mac OS X 核心;使用「NS」是由于這些類別的名稱在 NeXTSTEP 開發(fā)時(shí)定下。
雖然 Objective-C 是 C 的超集,但它也不視 C 的基本型別為第一級的對象。
和 C++不同,Objective-C 不支援運(yùn)算子多載(它不支持ad-hoc多型)。亦與 C++不同,但和 Java 相同,Objective-C 只容許物件繼承一個(gè)類別(不設(shè)多重繼承)。Categories 和 protocols 不但可以提供很多多重繼承的好處,而且沒有很多缺點(diǎn),例如額外執(zhí)行時(shí)間過重和二進(jìn)制不兼容。
