久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

Objective-C

來自站長百科
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索

Objective-C,通常寫作ObjC和較少用的Objective CObj-C,是擴(kuò)充C的面向?qū)ο缶幊陶Z言。它主要使用于Mac OS XGNUstep這兩個使用OpenStep標(biāo)準(zhǔn)的系統(tǒng),而在NeXTSTEPOpenStep中它更是基本語言。Objective-C可以在gcc運作的系統(tǒng)寫和編譯,因為gcc含[[[Objective-C]]的編譯器。1980年代初布萊德·確斯(Brad Cox)在其公司Stepstone發(fā)明Objective-C。他對軟件設(shè)計和編程里的真實可用度問題十分關(guān)心。Objective-C最主要的描述是他1986年出版的Object Oriented Programming: An Evolutionary Approach. Addison Wesley. ISBN 0-201-54834-8.

語言特點[ ]

Objective-C用途:編寫iphone應(yīng)用程序的利器 Tiobe在今年7月的編程語言排行榜中有一個顯著變化是:一直在50名左右的Objective-C排名大幅提升,它的流行當(dāng)歸功于iphone的成功,因為Objective-C一直被用于編寫iphone應(yīng)用程序。

Objective-C是非常實際的語言。它使用一個用C寫成、很小的運行庫,只會令應(yīng)用程序的大小增加很小,和大部分OO系統(tǒng)使用極大的VM執(zhí)行時間會取代了整個系統(tǒng)的運作相反。ObjC寫成的程序通常不會比其原始碼大很多。而其函式庫(通常沒附在軟件發(fā)行本)亦和Smalltalk系統(tǒng)要使用極大的內(nèi)存來開啟一個窗口的情況相反。


Objective-C的最初版本并不支持垃圾回收。在當(dāng)時這是爭論的焦點之一,很多人考慮到Smalltalk回收時有漫長的死亡時間,令整個系統(tǒng)失去功用。Objective-C為避免此問題才不擁有這個功能。雖然某些第三方版本已加入這個功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入這個功能。

另一個問題是ObjC不包括命名空間機(jī)制(namespace mechanism)。取而代之的是程序設(shè)計師必須在其類別名稱加上前綴,時常引致沖突。在2004年,在Cocoa編程環(huán)境中,所有Mac OS X類別和函式均有NS作為前綴,例如NSObject或NSButton來清楚分辨它們屬于Mac OS X核心;使用NS是由于這些類別的名稱在NeXTSTEP開發(fā)時定下。

雖然Objective-CC的母集,但它也不視C的基本型別為第一級的對象。

Objective-C同C++的異同:

和C++不同,Objective-C不支持運算子多載(它不支持ad-hoc多型)。亦與C++不同,但和Java相同,Objective-C只容許對象繼承一個類別(不設(shè)多重繼承)。Categories和protocols不但可以提供很多多重繼承的好處,而且沒有很多缺點,例如額外執(zhí)行時間過重和二進(jìn)制不兼容。

優(yōu)點與缺點[ ]

Objective-C是非?!皩嶋H”的語言。它使用一個用C寫成、很小的運行庫,只會令應(yīng)用程序的大小增加很小,和大部分OO系統(tǒng)使用極大的VM執(zhí)行時間會取代了整個系統(tǒng)的運作相反。ObjC寫成的程序通常不會比其原始碼大很多。而其函式庫(通常沒附在軟件發(fā)行本)亦和Smalltalk系統(tǒng)要使用極大的內(nèi)存來開啟一個窗口的情況相反。

Objective-C的最初版本并不支持垃圾回收。在當(dāng)時這是爭論的焦點之一,很多人考慮到Smalltalk回收時有漫長的“死亡時間”,令整個系統(tǒng)失去功用。Objective-C為避免此問題才不擁有這個功能。雖然某些第三方版本已加入這個功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入這個功能。不過令人欣慰的是在Apple發(fā)布的xCode4中已經(jīng)支持自動釋放啦,我不敢冒昧地說那是垃圾回收,因為兩者機(jī)制不同,在xCode4中的自動釋放,也就是ARC(Automatic Reference Counting)機(jī)制,是不需要用戶手動去Release一個對象,而是在編譯期間,編譯器會自動幫你添加那些以前你經(jīng)常寫的[NSObject release]。

另一個問題是ObjC不包括命名空間機(jī)制(namespace mechanism)。取而代之的是程序設(shè)計師必須在其類別名稱加上前綴,時常引致沖突。在2004年,在Cocoa編程環(huán)境中,所有Mac OS X類別和函式均有“NS”作為前綴,例如NSObject或NSButton來清楚分別它們屬于Mac OS X核心;使用“NS”是由于這些類別的名稱在NeXTSTEP開發(fā)時定下。

雖然Objective-C是C的母集,但它也不視C的基本型別為第一級的對象。

和C++不同,Objective-C不支援運算子多載(它不支持ad-hoc多型)。亦與C++不同,但和Java相同,Objective-C只容許對象繼承一個類別(不設(shè)多重繼承)。Categories和protocols不但可以提供很多多重繼承的好處,而且沒有很多缺點,例如額外執(zhí)行時間過重和二進(jìn)制不兼容。

由于Obj-C使用動態(tài)運行時類型,而且所有的方法都是函數(shù)調(diào)用(有時甚至連系統(tǒng)調(diào)用(syscalls)也如此),很多常見的編譯時性能優(yōu)化方法都不能應(yīng)用于Obj-C(例如:內(nèi)聯(lián)函數(shù)、常數(shù)傳播、交互式優(yōu)化、純量取代與聚集等)。這使得Obj-C性能劣于類似的對象抽象語言(如C++)。不過Obj-C擁護(hù)者認(rèn)為既然Obj-C運行時消耗較大,Obj-C本來就不應(yīng)應(yīng)用于C++或Java常見的底層抽象。

簡單代碼[ ]

01 #import <Foundation/Foundation.h>

02

03 int main (int argc, const char * argv[]) {

04 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

05

06 // insert code here...

07 NSLog(@"Hello, World!");

08 [pool drain];

09 return 0;

10 }

以上是Xcode開發(fā)環(huán)境下默認(rèn)的.m文件內(nèi)容,就是原生的Hello World范例代碼。

關(guān)于hello world的更多擴(kuò)展內(nèi)容

在 Objective-C 中 #import 和 #include 的區(qū)別

在 Objective-C 中,#import 被當(dāng)成 #include 指令的改良版本來使用。除此之外,#import 確定一個文 件只能被導(dǎo)入一 次,這使你在遞歸包含中不會出現(xiàn)問題。使用哪一個還是由你來決定。一般來說,在導(dǎo)入 Objective-C 頭文件的時候使用 #import,包含 C 頭文件時使用 #include。

未來發(fā)展[ ]

2011年已經(jīng)過去一半,從市場占有率來看,有一種語言脫穎而出,那就是Objective-C,相對2010年增長了2.68%,亞軍則是Lua,增長率為1.04% ,如果按這個走勢下去,2012年的1月,Lua也將和現(xiàn)在的Objective-C一樣,成為年度語言。

2010年的4月,TIOBE世界編程語言排行榜的前20名。Objective-C則從第8一路飆升,超越了C#,占據(jù)了第4的位置。

2012年的7月,Objective-C首度超越了C++,取代C++成為排行榜的第3位,成為新科探花。

2013年的1月,Objective-C 連續(xù)第 2 年獲得“年度語言”殊榮。年度語言是指在上一年份額增長最多的語言。Objective-C 最新的份額為 10.283%,比去年同期增長了 3.37%。


相關(guān)條目[ ]

參考來源[ ]