Object-C通常寫作Objective-C或者Obj-C或OC,是根據c語言所衍生出來的語言,繼承了C語言的特性,是擴充C的面向對象編程語言。它主要應用于Mac OS X和GNUstep,而在NeXTSTEP和OpenStep中它更是基本語言。Object-C可以在 GCC 運作的系統上編寫和編譯,因為gcc含Object-C的編譯器。在MAC OS X系統下,蘋果公司提供的SDK等開發工具包,可以用來做iOS開發,開發后的程序在IPhone 虛擬機中進行測試,運用的主要語言為Object-C。
19世紀80年代初,Brad Cox在其公司Stepstone發明了Objective-C語言。它被設計成既擁有復雜的面向對象設計理念又可以輕松使用與閱讀的語言,不僅提供了定義類、方法和相關屬性的一系列語法,還支持其他結構促進類的動態擴展,是在Mac OS X、iOS系統上進行軟件開發的首選語言。
隨著iOS系統的普及和流行,使用Obiective-C開發應用程序成為一種流行時尚。2011年,因為用戶量增長迅速,Obiective-C超越Python成為年度計算機語言。
語言用途
Objective-C是編寫以下應用的利器:
??iOS操作系統
??iOS應用程序
??Mac OS X操作系統
??Mac OSX 上的應用程序
Objective-C的流行歸功于IPhone的成功。編寫iPhone應用程序的主要編程語言是Objective-C。
語言特點
基本特點
Objective-C是非常實用的語言。它是一個用C寫成很小的運行庫,令應用程序的尺寸增加很小,和大部分OO系統使用極大的VM執行時間會取代了整個系統的運作相反。Objective-C寫成的程序通常不會比其原始碼大很多。而其函式庫(通常沒附在軟件發行本)亦和smalltalk系統要使用極大的內存來開啟一個窗口的情況相反。因此,Objective-C它完全兼容標準c語言(C++對C語言的兼容僅在于大部分語法上,而在ABI(Application Binary 接口)上,還需要使用extern "C"這種顯式聲明來與C函數進行兼容),而在此基礎上增加了面向對象編程語言的特性以及smalltalk消息機制。
Objective-C的最初版本并不支持垃圾回收。在當時這是爭論的焦點之一,很多人考慮到smalltalk回收時有漫長的死亡時間,令整個系統失去功用。Objective-C為避免此問題才不擁有這個功能。雖然某些第三方版本已加入這個功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入這個功能。
雖然Objective-C是C的超集,但它不是C的基本類型為第一級的對象。
異同
Objective-C同C++的異同:
和C++不同,Objective-C不支持運算子重載(它不支持ad-hoc多型)。亦與C++不同,但和Java相同,Objective-C只容許對象繼承一個類別(不設多重繼承)。Categories和protocols不但可以提供很多多重繼承的好處,而且沒有很多缺點,例如額外執行時間過重和二進制不兼容。
Objective-C和C++的比較
單一繼承:
和Java、smalltalk一樣,Objective-C不支持多重繼承,而C++支持多重繼承。
動態:
Objective-C是動態定型(dynamicaly typed),它的類庫比C++容易操作。Objective-C 在運行時可以允許根據字符串名字來訪問方法和類,還可以動態連接和添加類。
C++ 跟從面向對象編程里的simula 67(一種早期OO語言)學派,而Objecive-C屬于smalltalk學派。
在C++里,對象的靜態類型決定你是否可以發送消息給它,而對Objective-C來說,由動態類型來決定。Simula 67學派更安全,因為大部分錯誤可以在編譯時查出。而smalltalk學派更靈活,比如一些Smalltalk 看來無誤的程序拿到Simualr67那里就無法通過。
從很多方面來看,C++和Objective-C的差別,與其說是技術上的,不如說是思維方式上的。你是否想更安全而舍棄靈活性?Simular67學派的支持者稱既然程序設計出色何必再要靈活性,而 smalltalk學派則稱為了靈活可以容忍運行時多出錯。
優缺點
Apple在其Mac OS X 10.3中仍未引入垃圾回收這個功能。不過令人欣慰的是在Apple發布的Xcode4中已經支持自動釋放(不等同于嚴格意義上的垃圾回收,因為兩者機制不同)。在Xcode4中的自動釋放,也就是ARC(Automatic Reference Counting)機制,不需要用戶手動去Release一個對象,而是在編譯期間,編譯器會自動幫你添加[NSObject release]。
另一個問題是Objective-C不包括命名空間機制(namespace mechanism),取而代之的是程序設計師必須在其類別名稱加上前綴,時常引起沖突。在2004年,在Cocoa編程環境中,所有Mac OS X類和函數均有“NS”作為前綴,例如NSObject或NSButton,以表明它們屬于Mac OS X核心(使用“NS”是由于這些類和函數在NeXTSTEP開發時定下的)。
雖然Objective-C是C的超集,但它不視C的基本型為第一級的對象。
由于Objective-C使用動態運行時類型,而且所有的方法都是函數調用(有時甚至連系統調用(syscalls)也如此),很多常見的編譯時性能優化技術失效(例如:內聯函數、常數傳播、交互式優化、標量取代與聚集等)。這使得Objetive-C性能劣于類似的對象抽象語言(如C++)。不過Objective-C擁護者認為既然Objective-C運行時消耗較大,Objective-C本來就不應應用于C++或Java常見的底層抽象。
難度
蘋果公司一直在嘗試降低Objective-C語言的復雜度 --淘汰手動內存管理以及C標準頭文件,引入更符合當下編程語言潮流的ARC機制,還有通過。語法來訪問屬性的getter/setter方法等等,都是為了降低Objective-C的學習難度。即便如此,學習Objective-C仍然需要克服學習門檻。它的熱度完全是由基于Objective-C編寫的熱門iOS應用帶起來。
產品排行榜
2010年5月
本期主要變化是Objective-C排名進入前十。盡管Objective-C的份額在上個月只達到0.08%,但卻在排名上邁出了重要一步——首次進入前十名。這一步的意義重大,要知道,2001年6月TIOBE編程榜發布以來,總體只有13個編程語言曾經進入前十名。
Objective-C流行的主要原因可能是它是唯一一種可以為IPhone和iPad編程的語言。但單從編程語言的角度來看,誕生于1986年的Object-c并沒有表現出多少新意。
2011年6月
Objective-C排名繼續爬升,從第10名上升到第7名,增長2.07%,是前二十名中增幅最大的。由此可見,Objective-C具有很大的發展空間。
2011年7月
本期的榜單標題: Objective-C將成為年度語言。Objective-C名列第6名。
2011年8月
Objective-C繼續強勁上升,有可能在2011年超過C#和PHP。
2011年11月
Objective-C保持在第6位,距離第5位的PHP僅有0.113%的差距,且保持上升趨勢,而PHP呈現下降趨勢,很可能在2011年會超越PHP升至第5位。
2011年12月
Objective-C在本期中又上升至第5位.
2012年1月
前三的位置有變動,第三位置已經易主,由上一期的C++變為了C#,不過Objective-C 在連續兩年獲得第二名之后,終于贏得了 TIOBE 2011 年度編程語言。
2012年7月
Objective-C升至第3位,壓倒了之前的C++,市場份額占到9.335%。
2012年8月
Objective-C繼續上升,隨著JAVA的下降,Objective-C存在超越JAVA的勢頭。
2012年9月
Objective-C繼續上升至第三位,但其與前兩名的差距還有很大,由此可見,未來很長一段時間內,還沒有語言能夠撼動C和Java的地位。
2012年10月
Objective-C繼續上升,增加了3.23個百分點,市場份額達到9.477%。
Objective-C躥升勢頭良好,增加了4.40個百分點,市場份額達到17.455%。
2012年12月
Object-C繼續停留在第三位,增加了4.31%個百分點,增長速度傲視群雄。市場份額達到11.116%,相比其他語言Object-C的增長速度非常快。
2013年1月
Object-C繼續停留在第三位。隨著手機應用程序市場的繼續增長占著主導的地位,預計Java(Android)和C++/C#(Windows Phone)也將會重獲民心,而Objective-C也會繼續增長。
2013年2月
TIOBE 公布了2013年2月TIOBE 編程語言指數排行榜。此次前三位置有變化,Java 重回第一,C 降至第二,Objective-C 還是第三。
2013年3月
2013年3月12日,Tiobe公布了新一期編程語言排行榜。Java依舊是占據第一的位置,c語言緊隨其后。值得注意的Objective-C持續發力,已經占到了第三的位置。咋一看榜單,前5條中C#下滑最快,從第3名下降到第五名。而其他語言都與之前沒有變化。
2013年4月
2013年4月TIOBE編程語言排行榜發布了!4月份最主要的變化是 C 語言超越 Java 又居第一,而 C++ 超過 Objective-C 位列第三。
2013年5月
2013年5月TIOBE編程語言排行榜發布!C語言漲勢迅猛,依然占據著榜首的位置;Java、C++略有下滑,又由于Objective-C的反彈,本來差距不大的C++與Objective-C再度易位!
2013年8月
在2013年8月排行中,TIOBE增加了16個新的搜索引擎后,C和Objective-C成為最大的受害者,它們呈大幅下降趨勢,分別下降了1.65% 和2.17%;而Go 語言則從42 名提升到26 名。LabVIEW者從100提升到49名,Openedge ABL從129名提升到57名。而Java又重新回到了自己的寶座。
原生代碼
以上是Xcode開發環境下默認的.m文件內容,就是原生的Hello World范例代碼。
關于hello world的更多擴展內容
在 Objective-C 中 #import 和 #include 的區別
在 Objective-C 中,#import 被當成 #include 指令的改良版本來使用。除此之外,#import 確定一個文 件只能被導入一次,這使你在遞歸包含中不會出現問題。使用哪一個還是由你來決定。一般來說,在導入 Objective-C 頭文件的時候使用 #import,包含 C 頭文件時使用 #include。
未來發展
2011年已經過去一半,從市場占有率來看,有一種語言脫穎而出,那就是Objective-C,相對2010年增長了2.68%,亞軍則是Lua,增長率為1.04% ,如果按這個走勢下去,2012年的1月,Lua也將和現在的Objective-C一樣,成為年度語言。
2010年的4月,TIOBE世界編程語言排行榜的前20名。Objective-C則從第8一路飆升,超越了C#,占據了第4的位置。
2012年的7月,Objective-C首度超越了C++,取代C++成為排行榜的第3位,成為江蘇新科科技有限公司探花。
2013年的1月,Objective-C 連續第 2 年獲得“年度語言”殊榮。年度語言是指在上一年份額增長最多的語言。Objective-C 最新的份額為 10.283%,比去年同期增長了 3.37%。
參考資料 >
2013年1月編程語言排行榜.博客園.2013-01-06
Objective-C的第一個程序 HelloWorld.blog.sina.com.cn.2019-07-03