Objective-C 和 C++ 的區別有哪些?

池建強發表於2012-11-01

  知乎問題:這幾天閒來無事在圖書館看obj-c的書,看了兩天,給我的感覺是,這東西不就是加了物件導向的c嗎,而且類的語法還那麼古怪。這東西跟c++有什麼本質區別?為什麼蘋果會選擇obj-c而不是c++?

  答:Objective-C是C的擴充套件,設計思路上借鑑了Smalltalk的物件導向和訊息機制的思想。從我個人使用過的面嚮物件語言來看Objc是對訊息傳遞支援的最徹底也最顯式的。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作為原生語言。NextStep是以Mach和BSD為基礎,Objective-C是其語言和執行庫,後來的事大家都清楚,蘋果買了NextStep,賈伯斯迴歸蘋果,NextStep也成了Max OS X的基礎。以後發展越來越好,Objective-C反而成了蘋果的當家語言,現在基本上是蘋果在維護這門語言的發展。

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

相關文章