Objective-C 和 C++ 的區別有哪些?為什麼蘋果會選擇前者?

池建強發表於2012-08-26

有人在學習Objective-C的時候,經常會有這樣的感覺,這東西不就是加了物件導向的C嗎,而且類的語法還那麼古怪。這東西跟C++有什麼本質區別?為什麼蘋果會選擇Objective-C而不是C++?

這個問題要從Objective-C的語言特性談起。Objective-C是C的擴充套件,設計思路上借鑑了Smalltalk的物件導向和訊息機制的思想。從我個人使用過的面嚮物件語言來看Obj-C是對訊息傳遞支援的最徹底也最顯式的。Objective-C的類中定義的方法都是訊息傳遞,而且類和訊息之間是執行時繫結的,執行時編譯器把訊息傳送轉換成對objc_msgSend方法的呼叫。其它的C++、Java、Python、Ruby都體現得不明顯,更傾向於物件的封裝和抽象。

Objective-C和C++基本上是兩門語言,沒有太大的關係。Objective-C本身是靜態語言,編譯後就是機器碼,執行效率很高,但引入了很多類似Python、Ruby的動態特性,像動態型別推斷,id,selector,block等特性,所以又非常靈活。用慣了Java或C++會覺得Objective-C的語法很怪,但如果你用學習新事物拋棄舊思路的方式去學習這門語言的話,你會很快愛上它的訊息式的程式設計風格,加上XCode,無論是寫Mac應用還是iOS應用,都會非常得心應手。

學習Objective-C不需要有C的背景,倒是學Objective-C的時候順手可以把C也學了或溫習下,由於Objective-C是C的超集,所以在Objective-C環境執行C程式毫無問題。

關於蘋果為什麼採用Objective-C的問題,說明一下,其實不是蘋果採用了Objective-C,而是賈伯斯建立的Next公司的作業系統NextStep採用了Objective-C作為原生語言。

Objective-C在計算機程式語言中有著不短的歷史,80年代初Brad Cox和Tom Love發明了Objective-C,1988年賈伯斯的Next公司獲得了這門程式語言的授權,並開發出了Objective-C的語言庫和NEXTSTEP的開發環境。NextStep是以Mach和BSD為基礎,Objective-C是其語言和執行庫。後來的事大家都比較清楚了,蘋果買了NextStep,賈伯斯迴歸蘋果,NextStep也成了Max OS X的基礎。以後發展越來越好,Objective-C反而成了蘋果的當家語言,現在基本上是蘋果在維護這門語言的發展。

隨著蘋果的APP帝國不斷壯大,這門語言也得到了長足的發展,從1.0到2.0,從物件導向的C語言擴充套件,到記憶體引用計數管理,屬性管理,引入塊的概念,實現自動引用計數,優化編譯器,簡化語法等等。Objective-C在2011年和2012年分別獲得了TIOBE評選的年度語言,目前排名第三。

蘋果CEO庫克在2012年的WWDC大會上宣佈,蘋果已經為全球開發者支付了超過50億美金的分成收入,時至今日,估計已經遠遠超過50億了,對於開發者來說,這是一門能夠獨立創富的程式語言。

還有一點不能不提,第一臺全球資訊網的Server就是一個叫蒂姆·伯納斯-李的大牛在NextStep上寫的,包括瀏覽器。所以,我們們得感謝Objective-C,要不然還不知道網際網路會發展成啥樣呢......

相關文章