Objective-C 和 C++ 的區別有哪些?為什麼蘋果會選擇前者?
有人在學習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,要不然還不知道網際網路會發展成啥樣呢......
相關文章
- 蘋果簽名有哪些?它們各自的優勢和區別是什麼?蘋果簽名實現方式有哪些?蘋果
- 為什麼要選擇蘋果企業簽名?蘋果
- css中class和id選擇器有什麼區別?CSS
- CentOS和Ubuntu有什麼區別?選擇Linux哪個版本好?CentOSUbuntuLinux
- 相鄰兄弟選擇器、後代選擇器和子選擇器三者有什麼區別?
- 蘋果m2晶片和m1到底有什麼區別?蘋果晶片
- 蘋果系統中的的 Public 與 Developer Beta有什麼區別?蘋果Developer
- cython和python分別是什麼?區別有哪些?Python
- 蘋果證書為什麼會掉?蘋果
- 蘋果簽名為什麼會掉?蘋果
- Linux中ext3和ext4有什麼區別?如何選擇?Linux
- 新加坡基金會和私人公司有什麼區別?
- 住宅代理與資料中心代理有什麼區別,怎麼選擇?
- iPhone8官翻機和翻新機有什麼區別?怎麼辨別蘋果iPhone官翻機?iPhone蘋果
- 如何正確選擇iOS簽名,它們有什麼區別iOS
- 物件儲存的優勢有哪些?為什麼要選擇物件儲存?物件
- js選擇物件和jq選擇物件的區別JS物件
- 獨享與共享頻寬有哪些區別?如何選擇?
- 為什麼轉行都會選擇Python呢?學習python有什麼好處?Python
- 駭客型別有哪些?他們有什麼區別?型別
- 蘋果企業簽名和蘋果超級簽名該怎麼進行選擇?蘋果
- 是什麼讓巨人、蘋果、心動選擇了《帕斯卡契約》蘋果
- 蘋果和Epic神仙打架,為什麼會讓Steam躺著中槍?蘋果
- Kafka和RabbitMQ有哪些區別,各自適合什麼場景?KafkaMQ
- shim和polyfill有什麼區別
- vue和react有什麼區別?VueReact
- modbus和tcp有什麼區別?TCP
- Jsp和Servlet有什麼區別?JSServlet
- SpringBoot和Spring有什麼區別?Spring Boot
- Cache 和 Buffer 有什麼區別?
- RPA和IPA有什麼區別
- int 和 Integer 有什麼區別
- rancher 和 Kubernetes有什麼區別?
- QPS和TPS有什麼區別?
- Hifi和ONT 有什麼區別
- Iterator和ListIterator有什麼區別
- DOM和BOM有什麼區別?
- xpath和dom有什麼區別?
- Activity和Fragment有什麼區別Fragment