蘋果系統為什麼用Objective-C,而不用C++?
是可以在Mac開發裡面大量使用C++,我們叫他objectiveC ++
這樣讓用C的人也能有對象
如果你說的是iPad平板,跟喬布斯有很大的關係,NextStep就是一個key word。當年喬布斯從蘋果出走後,創建了NextStep,這個公司開發的電腦操作系統以OC為基礎,後來在蘋果收購NextStep並請回老喬時,以NextStep為基礎推出了OS X操作系統,而iPhone和iPad額OS基礎來自於OS X,這樣,OC自然會成為其開發語言。
看百度上的描述:NEXTSTEP是由NeXT.Inc所開發的操作系統。這套系統是以Mach和BSD為基礎,以Objective-C作為原生語言,具有很先進的GUI界面。1.0版推出時間是在1989年9月18日。剛開始NEXTSTEP只能在NeXT計算機上執行,1992年推出PC版的NEXTSTEP 486。3.1版和3.2版分別在1993年的5月及10月推出,但是終究失敗。最後版本3.3在1995年畫上句點。平台也已經不限於Motorola 68000家族,亦可在IBM PC x86、Sun SPARC及HP PA-RISC等平台上運行。後來蘋果計算機在1997年2月將NeXT買下,成為Mac OS X的基礎。
C++不是真正意義上的「面向對象」語言,動態特性太貧乏,實際上不能很好地玩弄GUI程序。ObjC要動態得多。
與之相比,Qt這類GUI架構都大量使用了額外的工具(比如代碼生成器)以解決運行時動態的問題,實際上擴展了非常多的內容。大概和MS搞C#的目的一樣吧。只是OC出現的太早所以沒想到用運行時處理位元組碼這回事吧
Apple Inc. 收購了 NEXTSTEP, 以此來發展 Mac os x, iOS 是基於是 Mac os x 來的,所以,NEXTSTEP 中的 Objective-C 就是這樣來的。另一個方面, Objective-C 的動態特性比 C++ 好不少。這類問題,回看歷史就好。
在那個時候Erlang沒有開源也沒有對外開放,所以喬布斯以為Objective-C是那個時代能找到的最好的OO語言
參見Apple自己的答案:
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/OOP_ObjC/Articles/ooWhy.html
好處裡面只有一點是值得肯定的,就是OC確實比較動態(至少在那個年代)。剩下應該是歷史原因較重。
我感覺C++不是個合適的選擇,但OC也是一坨…順便IDE的 XCode根本就是屎
因為Think different.
但是C++是可以用的。Objective-C是一種非常簡潔優雅的編程語言。至於蘋果為何選擇OBJC或者說喬布斯為何選擇OBJC,恐怕還是歷史原因:1. 喬布斯創建NeXTSTEP公司是在1985年。當時C++剛剛誕生,OBJC比C++更早出現,也比C++更加成熟。選擇OBJC而不是C++是風險更小。2. OBJC更加簡潔。最初的NeXTSTEP系統是在Motorola的68000處理器上運行的,性能非常有限。而C++語法繁雜,OBJC更簡單易用。這可能也是一個原因。3. 相對C++,OBJC是更加動態。更適合GUI程序編寫。NextSTEP作為一個當時非常時髦先進的GUI系統,選擇OBJC也更加合適。==========
總的來說,NeXTSTEP是當時最先進的GUI系統,OBJC也是當時最先進的OO動態語言。
上面 分析OC和C++的特性的都是因果倒置,其實用OC只是個偶然
我覺得主要原因要提一下,NextStep在選擇語言的時候OC已經算是很成熟了,而C++貌似是剛剛出品,還不是非常成熟。
大概蘋果是一個多情的公司
1995年,喬布斯創立NeXT公司。NeXT公司選擇Unix作為操作系統並創建了NextSTEP(使用OC語言開發的一款功能強大的用戶界面工具包)。
蘋果公司在1996年收購了NeXT之後,NextSTEP更名為Cocoa。
OC與Cocoa經過這麼多年的發展,已經演化成了一個足夠強大的工具集,所以蘋果公司應該沒有必要重新選擇C++。
C++雖然具備很多OC沒有的特性:多重繼承、命名空間、運算符重載、模板、類變數、STL等,但OC也提供了可以替代或模擬這些功能的特性和技術。java objectivec c# dlephi這些單繼承多介面語言入門容易同時開發GUI程序效率奇高
一般有老手帶 一個月都可以入門做專業開發了
c++ 嘿嘿所以蘋果系統現在用Swift開發了
這個問題估計歸根結底得問問當年Next公司的CTO。
一切令開發者開心的事情都是大蘋果極力避免的( ̄Д ̄)?
我要是有能力開一個大公司 , 我就要我手下的員工用VB寫APP
其實C++這種東西什麼功能都支持反而有些東西不好用太複雜。比如指針,比如多重繼承。並且C++比較適合於搭配Win API進行Win開發。
一句話,歷史原因。
推薦閱讀:
※為什麼盡量不要使用using namespace std?
※如何delete數組?
※c/cpp 中從源代碼到可執行文件的過程,鏈接是必須的嗎?
※c++中有現成的string hash函數么?
※大家能談談是怎麼學習windbg的嗎?
TAG:Mac | iOS開發 | C | Objective-C |