知乎問題:這幾天閑來無事在圖書館看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,要不然還不知道互連網會發展成啥樣呢......