簡介Objective-C語言

Objective-C,一般寫做ObjC和較少用的Objective C或Obj-C,是擴充C的面向對象編程語言。它主要使用於Mac OS X和GNUstep這兩個使用OpenStep標準的系統,而在NeXTSTEP和OpenStep中它更是基本語言。Objective-C能夠在gcc運做的系統寫和編譯,由於gcc含Objective-C的編譯器。1980年代初布萊德·確斯(Brad Cox)在其公司Stepstone發明Objective-C。他對軟件設計和編程裏的真實可用度問題十分關心。Objective-C最主要的描述是他1986年出版的Object Oriented Programming: An Evolutionary Approach. Addison Wesley. ISBN 0-201-54834-8.編程


優勢及缺點安全


Objective-C是很是「實際」的語言。它使用一個用C寫成、很小的運行庫,只會令應用程序的大小增長很小,和大部分OO系統使用極大的VM執行時間會取代了整個系統的運做相反。ObjC寫成的程序一般不會比其原始碼大不少。而其函式庫(一般沒附在軟件發行本)亦和Smalltalk系統要使用極大的內存來開啓一個窗口的狀況相反。 Objective-C的最第一版本並不支持垃圾回收。在當時這是爭論的焦點之一,不少人考慮到Smalltalk回收時有漫長的「死亡時間」,令整個系統失去功用。Objective-C爲避免此問題纔不擁有這個功能。雖然某些第三方版本已加入這個功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入這個功能。 另外一個問題是ObjC不包括命名空間機制(namespace mechanism)。取而代之的是程序設計師必須在其類別名稱加上前綴,時常引致衝突。在2004年,在Cocoa編程環境中,全部Mac OS X類別和函式均有「NS」做爲前綴,例如NSObject或NSButton來清楚分別它們屬於Mac OS X核心;使用「NS」是因爲這些類別的名稱在NeXTSTEP開發時定下。 雖然Objective-C是C的母集,但它也不視C的基本型別爲第一級的對象。 和C++不一樣,Objective-C不支援運算子多載(它不支持ad-hoc多型)。亦與C++不一樣,但和Java相同,Objective-C只允許對象繼承一個類別(不設多重繼承)。Categories和protocols不但能夠提供不少多重繼承的好處,並且沒有不少缺點,例如額外執行時間太重和二進制不兼容。iphone


Objective-C 排行榜編程語言


TIOBE 2010 5月編程語言榜已於近日發佈,本期主要變化是Objective-C排名進入前十。儘管Objective-C的份額在上個月只達到0.08%,但卻在排名上邁出了重要一步——首次進入前十名。這一步的意義重大,要知道,2001年6月TIOBE編程榜發佈以來,整體只有13個編程語言曾經進入前十名。 Objective-C流行的主要緣由多是它是惟一一種能夠爲iphone和ipad編程的語言。但單從編程語言的角度來看,誕生於1986年的Object-c並無表現出多少新意。函數


TIOBE 2010年6月份編程語言榜已於近日發佈,Objective-C排名繼續爬升,從第10名上升到第9名。因而可知,Objective-C具備很大的發展空間。學習


Objective-C和C++的比較spa


單一繼承:設計


Objective-C不支持多重繼承,(同Java和Smalltalk),而C++語言支持多重繼承。指針


動態:code


Objective-C是動態定型(dynamicaly typed)因此它的類庫比C++要容易操做。Objective-C 在運行時能夠容許根據字符串名字來訪問方法和類,還能夠動態鏈接和添加類。


C++ 跟從面向對象編程裏的Simula 67(一種早期OO語言)學派,而Objecive-C屬於Smalltalk學派。


在C++裏,對象的靜態類型決定你是否能夠發送消息給它,而對Objective-C來講,由動態類型來決定。Simula 67學派更安全,由於大部分錯誤能夠在編譯時查出。 而Smalltalk學派更靈活,好比一些Smalltalk 看來無誤的程序拿到Simualr 67那裏就沒法經過。


從不少方面來看,C++和Objective-C的差異,與其說時技術上的, 不如說是思惟方式上的。你是否想更安全而捨棄靈活性?Simular67學派的支持者聲稱既然程序設計出色何須再要靈活性,而 Smalltalk學派則辯稱爲了靈活能夠容忍運行時多出錯。


Objective-C簡明教程


前言


◆開始學習前,假設你已經具有了一些C語言的基礎知識,包括變量類型、函數、返回值、以及指針的相關概念。若是對這些還不瞭解,建議首先學習譚浩強的《C程序設計》。

◆Objective-C,是 C 的衍生體,繼承了全部 C 語言的特性。是有一些例外,可是它們不是繼承於 C 的語言特性自己。

◆nil:在 C/C++ 你或許曾使用過 NULL,而在 Objective-C 中則是 nil。不一樣之處是你能夠傳遞訊息給 nil(例如 [nil message];),這是徹底合法的,然而你卻不能對 NULL 如法炮製。

◆BOOL:C 沒有正式的布爾類型,而在 Objective-C 中也不是「真的」有。它是包含在 Foundation classes(基本類別庫)中(即 import NSObject.h;nil 也是包括在這個標頭檔內)。BOOL 在 Objective-C 中有兩種型態:YES 或 NO,而不是 TRUE 或 FALSE。

◆#import vs #include:就如同你在 hello world 範例中看到的,咱們使用了 #import。#import 由 gcc 編譯器支援。我並不建議使用 #include,#import 基本上跟 .h 檔頭尾的 #ifndef #define #endif 相同。許多程式員們都贊成,使用這些東西這是十分愚蠢的。不管如何,使用 #import 就對了。這樣不但能夠避免麻煩,並且萬一有一天 gcc 把它拿掉了,將會有足夠的 Objective-C 程式員能夠堅持保留它或是將它放回來。偷偷告訴你,Apple 在它們官方的程式碼中也使用了 #import。因此萬一有一天這種事真的發生,不難預料 Apple 將會提供一個支援 #import 的 gcc 分支版本。

◆ Objective-C 中, method 及 message 這兩個字是能夠互換的。不過 messages 擁有特別的特性,具體區別在後面介紹。

編譯 hello world

hello.m 
 
#import 
 
int main( int argc, const char *argv[] ) { 
 
printf( "hello world\n" ); 
 
return 0; 
 
}

◆輸出

hello world

◆ 在 Objective-C 中使用 #import 代替 #include

◆ Objective-C 的預設副檔名是 .m

建立 classe @interface

◆基於 "Programming in Objective-C," Copyright (C) 2004 by Sams Publishing 一書中的範例,並通過容許而刊載。

#import 
 
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範例代碼。

關於hello world的更多擴展內容

在 Objective-C 中 #import 和 #include 的區別

在 Objective-C 中,#import 被當成 #include 指令的改良版原本使用。除此以外,#import 肯定一個文 件只能被導入一次,這使你在遞歸包含中不會出現問題。使用哪個仍是由你來決定。通常來講,在導入 Objective-C 頭文件的時候使用 #import,包含 C 頭文件時使用 #include。

相關文章
相關標籤/搜索