Objective-C 和 C++ 的區別有哪些?
知乎問題:這幾天閒來無事在圖書館看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,要不然還不知道網際網路會發展成啥樣呢......
相關文章
- Objective-C 和 C++ 的區別有哪些?為什麼蘋果會選擇前者?ObjectC++蘋果
- htmlentities和htmlspecialchars 的區別有哪些HTML
- @Autowired和@Resource有哪些區別
- HTTP和HTTPS的區別有哪些?HTTP
- HTTP和HTTPS有哪些區別?HTTP
- python堆和棧的區別有哪些Python
- c++中&和&&有什麼區別C++
- Python和C#有哪些區別?PythonC#
- Mysql引擎中MyISAM和InnoDB的區別有哪些?MySql
- Python和access的區別有哪些?Python教程Python
- Linux中less和more命令的區別有哪些?Linux
- Java堆疊的區別有哪些Java
- C++中vector*和vector有什麼區別C++
- Objective-c nil, Nil, NULL和NSNull的區別ObjectNull
- 無程式碼和低程式碼有哪些區別
- require()、import、import()有哪些區別?UIImport
- 變頻空調和定頻空調的區別有哪些 有何不同
- cython和python分別是什麼?區別有哪些?Python
- var、let和const三者有哪些區別?
- 駭客型別有哪些?他們有什麼區別?型別
- C和C++區別C++
- HTTP 和 HTTPS 之間除了安全性區別外,還有哪些區別HTTP
- C++中運算子 &和&&、|和|| 的區別C++
- 奈學:資料湖和資料倉儲的區別有哪些?
- APP測試中IOS和Android的區別,有哪些注意點?APPiOSAndroid
- 企業走資訊化和數字化的道路,有哪些區別?
- 高匿代理IP和透明代理IP有哪些區別?
- Python 2 和 Python 3 主要區別有哪些(一)?Python
- 當型迴圈和直到型迴圈有哪些區別
- Objective-C 中的協議(@protocol)和介面(@interface)的區別Object協議Protocol
- C++中的return和exit區別C++
- c++中指標和引用的區別?C++指標
- C++中 struct 和 class 的區別C++Struct
- C++中指標和引用的區別C++指標
- C++和java多型的區別C++Java多型
- C++中struct 和 class的區別C++Struct
- C/C++——sizeof和strlen的區別C++
- 伺服器與PC區別有哪些伺服器