簡介
20世紀八十年代初,BradCox在其公司Stepstone發明Objective-C,它以一種叫做SmallTalk-80的語言為基礎。Objective-C建立在C語言之上,意味著它是在C語言基礎上添加了擴展而創造出來的能夠創建和操作對象的一門新的程式設計語言。對Objective-C最主要的描述是他1986年出版的《Object-orientedProgramming,AnEvolutionaryApproach》。1988年,NeXTSoftware公司獲得了Objective-C語言的授權,並開發出了Objective-C的語言庫和一個名為NEXTSTEP的開發環境。1992年,自由軟體基金會的GNU開發環境增加了對Objective-C的支持。1994年,NeXTComputer公司和昇陽微系統(SunMicrosystem)聯合發布了一個針對NEXTSTEP系統的標準典範,名為OPENSTEP。OPENSTEP在自由軟體基金會的實現名稱為GNUstep。1996年12月20日,蘋果公司宣布收購NeXTSoftware公司,NEXTSTEP/OPENSTEP環境成為蘋果作業系統下一個主要發行版本OSX的基礎。這個開發環境的該版本被蘋果公司稱為Cocoa。
優缺點
Objective-C是非常“實際”的語言。它使用一個用C寫成、很小的運行庫,只會令應用程式的大小增加很小,和大部分OO系統使用極大的VM執行時間會取代了整個系統的運作相反。ObjC寫 成的程式通常不會比其原始碼大很多。而其函式庫(通常沒附在軟體發行本)亦和Smalltalk系統要使用極大的記憶體來開啟一個視窗的情況相反。
Objective-C的最初版本並不支持垃圾回收。在當時這是爭論的焦點之一,很多人考慮到Smalltalk回收時有漫長的“死亡時間”,令整個系統失去功用。Objective-C為避免此問題才不擁有這個功能。雖然某些第三方版本已加入這個功能(尤是GNUstep),Apple在其MacOSX10.3中仍未引入這個功能。不過令人欣慰的是在Apple發布的xCode4中已經支持自動釋放啦,我不敢冒昧地說那是垃圾回收,因為兩者機制不同,在xCode4中的自動釋放,也就是ARC(AutomaticReferenceCounting)機制,是不需要用戶手動去Release一個對象,而是在編譯期間,編譯器會自動幫你添加那些以前你經常寫的[NSObjectrelease]。
另一個問題是ObjC不包括命名空間機制(namespacemechanism)。取而代之的是程式設計師必須在其類別名稱加上前綴,時常引致衝突。在2004年,在Cocoa編程環境中,所有MacOSX類別和函式均有“NS”作為前綴,例如NSObject或NSButton來清楚分別它們屬於MacOSX核心;使用“NS”是由於這些類別的名稱在NeXTSTEP開發時定下。
雖然Objective-C是C的母集,但它也不視C的基本型別為第一級的對象。
和C++不同,Objective-C不支援運運算元多載(它不支持ad-hoc多型)。亦與C++不同,但和Java相同,Objective-C只容許對象繼承一個類別(不設多重繼承)。Categories和protocols不但可以提供很多多重繼承的好處,而且沒有很多缺點,例如額外執行時間過重和二進制不兼容。
由於Obj-C使用動態運行時類型,而且所有的方法都是函式調用(有時甚至連繫統調用(syscalls)也如此),很多常見的編譯時性能最佳化方法都不能套用於Obj-C(例如:內聯函式、常數傳播、互動式最佳化、純量取代與聚集等)。這使得Obj-C性能劣於類似的對象抽象語言(如C++)。不過Obj-C擁護者認為既然Obj-C運行時消耗較大,Obj-C本來就不應套用於C++或Java常見的底層抽象。
Objective-C排行榜
tiobe20105月程式語言榜已於近日發布,本期主要變化是Objective-C排名進入前十。儘管Objective-C的份額在上個月只達到0.08%,但卻在排名上邁出了重要一步——首次進入前十名。這一步的意義重大,要知道,2001年6月TIOBE編程榜發布以來,總體只有13個程式語言曾經進入前十名。
Objective-C流行的主要原因可能是它是唯一一種可以為iphone和ipad編程的語言。但單從程式語言的角度來看,誕生於1986年的Object-c並沒有表現出多少新意。
TIOBE2011年6月份程式語言榜已於近日發布,Objective-C排名繼續爬升,從第10名上升到第7名,增長2.07%,是前二十名中增幅最大的。由此可見,Objective-C具有很大的發展空間。
TIOBE公布了2011年7月程式語言排行榜,本期的榜單標題:Objective-C將成為年度語言。Objective-C名列第6名。
TIOBE公布了2011年8月程式語言排行榜,Objective-C繼續強勁上升,有可能在今年超過C#和PHP。
TIOBE公布了2011年11月程式語言排行榜,Objective-C保持在第6位,距離第5位的PHP僅有0.113%的差距,且保持上升趨勢,而PHP呈現下降趨勢,很可能在今年會超越PHP升至第5位。
TIOBE2011年12月程式語言排行榜,Objective-C在本期中又上升至第5位.
TIOBE2012年1月程式語言排行榜。前三的位置有變動,第三位置已經易主,由上一期的C++變為了C#,不過Objective-C在連續兩年獲得第二名之後,終於贏得了TIOBE2011年度程式語言。