複製鏈接
請複製以下鏈接發送給好友

Objective-C

鎖定
Objective-C,通常寫作ObjC或OC和較少用的Objective C或Obj-C,是擴充C的面向對象編程語言。它主要使用於Mac OS XGNUstep這兩個使用OpenStep標準的系統,而在NeXTSTEP和OpenStep中它更是基本語言。
GCCClang含Objective-C的編譯器,Objective-C可以在GCC以及Clang運作的系統上編譯。
1980年代初布萊德·考克斯(Brad Cox)在其公司Stepstone發明Objective-C。他對軟件設計和編程裏的真實可用度問題十分關心。Objective-C最主要的描述是他1986年出版的書 Object Oriented Programming: An Evolutionary Approach. Addison Wesley. ISBN 0-201-54834-8.
中文名
擴充C的面向對象編程語言
外文名
Objective-C
簡    寫
ObjC&OC
適用領域
計算機
創始人
布萊德·考克斯
創始時間
1980年代
是否區分大小寫

Objective-C語言用途

Objective-C是編寫以下應用的利器:
  • iOS操作系統
  • iOS應用程序
  • iPad OS操作系統
  • iPad OS應用程序
  • Mac OS X操作系統
  • Mac OSX 上的應用程序
Objective-C的流行歸功於iPhone的成功。編寫iPhone應用程序的主要編程語言是Objective-C。

Objective-C語言特點

Objective-C基本特點

Objective-C是非常實用的語言。它是一個用C寫成很小的運行庫,令應用程序的尺寸增加很小,和大部分OO系統使用極大的VM執行時間會取代了整個系統的運作相反。Objective-C寫成的程序通常不會比其原始碼大很多。而其函式庫(通常沒附在軟件發行本)亦和Smalltalk系統要使用極大的內存來開啓一個窗口的情況相反。因此,Objective-C它完全兼容標準C語言C++對C語言的兼容僅在於大部分語法上),而在ABI(Application Binary Interface)上,還需要使用extern "C"這種顯式聲明來與C函數進行兼容,而在此基礎上增加了面向對象編程語言的特性以及Smalltalk消息機制 [1] 
Objective-C的最初版本並不支持垃圾回收。在當時這是爭論的焦點之一,很多人考慮到Smalltalk回收時有漫長的死亡時間,令整個系統失去功用。Objective-C為避免此問題才不擁有這個功能。雖然某些第三方版本已加入這個功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入這個功能。
雖然Objective-C是C的超集,但它不是C的基本類型為第一級的對象。

Objective-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學派則稱為了靈活可以容忍運行時多出錯。

Objective-C優缺點

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”是由於這些類和函數在NeXT OpenStep開發時定下的)。
雖然Objective-C是C的超集,但它不視C的基本型為第一級的對象。
由於Objective-C使用動態運行時類型,而且所有的方法都是函數調用有時甚至連系統調用(syscalls)也如此,很多常見的編譯時性能優化技術失效(例如:內聯函數常數傳播、交互式優化、純量取代與聚集等)。這使得Objetive-C性能劣於類似的對象抽象語言(如C++)。不過Objective-C擁護者認為既然Objective-C運行時消耗較大,Objective-C本來就不應應用於C++或Java常見的底層抽象。

Objective-C難度

蘋果公司一直在嘗試降低Objective-C語言的複雜度 --淘汰手動內存管理以及C標準頭文件,引入更符合當下編程語言潮流的ARC機制,還有通過.語法來訪問屬性的getter/setter方法等等,都是為了降低Objective-C的學習難度。即便如此,學習Objective-C仍然需要克服學習門檻。它的熱度完全是由基於Objective-C編寫的熱門iOS應用帶起來。 [2] 

Objective-C產品排行榜

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月
2013年1月編程語言排行榜榜單
2013年1月編程語言排行榜榜單(6張)
Object-C繼續停留在第三位。隨着手機應用程序市場的繼續增長佔着主導的地位,預計Java(Android)和C++/C#(Windows Phone)也將會重獲民心,而Objective-C也會繼續增長。 [3] 
2013年2月
TIOBE 公佈了2013年2月TIOBE 編程語言指數排行榜。此次前三位置有變化,Java 重回第一,C 降至第二,Objective-C 還是第三。
2013年3月
2013年3月12日,Tiobe公佈了新一期編程語言排行榜。Java依舊是佔據第一的位置,C語言緊隨其後。值得注意的Objective-C持續發力,已經佔到了第三的位置。咋一看榜單,前5條中C#下滑最快,從第3名下降到第五名。而其他語言都與之前沒有變化。 [4] 
2013年4月
2013年4月TIOBE編程語言排行榜發佈了!4月份最主要的變化是 C 語言超越 Java 又居第一,而 C++ 超過 Objective-C 位列第三。 [5] 
2013年5月
2013年5月TIOBE編程語言排行榜發佈!C語言漲勢迅猛,依然佔據着榜首的位置;Java、C++略有下滑,又由於Objective-C的反彈,本來差距不大的C++與Objective-C再度易位! [6] 
2013年8月
在2013年8月排行中,TIOBE增加了16個新的搜索引擎後,C和Objective-C成為最大的受害者,它們呈大幅下降趨勢,分別下降了1.65% 和2.17%;而Go 語言則從42 名提升到26 名。LabVIEW者從100提升到49名,Openedge ABL從129名提升到57名。而Java又重新回到了自己的寶座。 [7] 

Objective-C原生代碼

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

// insert code here...
NSLog(@"Hello, World!");
[pool drain];
return 0;
}
以上是Xcode開發環境下默認的.m文件內容,就是原生的Hello World範例代碼。 [8] 
關於hello world的更多擴展內容
在 Objective-C 中 #import 和 #include 的區別
在 Objective-C 中,#import 被當成 #include 指令的改良版本來使用。除此之外,#import 確定一個文件只能被導入一次,這使你在遞歸包含中不會出現問題。使用哪一個還是由你來決定。一般來説,在導入 Objective-C 頭文件的時候使用 #import,包含 C 頭文件時使用 #include。

Objective-C未來發展

未來發展
未來發展(5張)
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%,比2012年同期增長了 3.37%。
參考資料