ios培訓——簡介Objective-C語言_第1頁
ios培訓——簡介Objective-C語言_第2頁
ios培訓——簡介Objective-C語言_第3頁
ios培訓——簡介Objective-C語言_第4頁
ios培訓——簡介Objective-C語言_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Objective-C,通常寫作 ObjC 和較少用的ObjectiveC 或 Obj-C,是擴充 C 的面向對象編程語言。它主要使用于 MacOSX 和 GNUstep 這兩個使用 OpenStep 標準的系統(tǒng),而在 NeXTSTEP 和OpenStep 中它更是基本語言。Objective-C 可以在 g 運作的系統(tǒng)寫和編譯,因為g 含 Objective-C的編譯器。1980 年代初布萊德確斯(BradCox)在其 Stepstone 發(fā)明 Objective-C。他對軟件設計和編程里的真實可用度問題十分關心。Objective-C 最主要的描述是他 1986 年出版的ObjectOri

2、entedProgramming:AnEvolutionaryApproach.AddisonWesley.ISBN0-201-54834-8.優(yōu)點及缺點Objective-C 是非常“實際”的語言。它使用一個用 C 寫成、很小的運行庫,只會令應用程序的大小增加很小,和大部分 OO 系統(tǒng)使用極大的VM 執(zhí)行時間會取代了整個系統(tǒng)的運作相反。 ObjC寫成的程序通常不會比其原始碼大很多。而其函式庫(通常沒附在軟件發(fā)行本)亦和 Smalltalk 系統(tǒng)要使用極大的內存來開啟一個窗口的情況相反。 Objective-C 的最初版本并不支持垃圾回收。思緒飛奔的黎明,一股股傾斜的香氣從不知名的地方飄來,像

3、麥的純在當時這是爭論的焦點之一,很多人考慮到Smalltalk 回收時有漫長的“死亡時間”,令整個系統(tǒng)失去功用。Objective-C 為避免此問題才不擁有這個功能。雖然某些第三方版本已加入這個功能(尤是 GNUstep),Apple 在其 MacOSX10.3 中仍未引入這個功能。另一個問題是 ObjC 不包括命名空間機制(namespacemechanism)。取而代之的是程序設計師必須在其類別名稱加上前綴,時常引致沖突。在 2004 年,在 Cocoa 編程環(huán)境中,所有 MacOSX 類別和函式均有“NS”作為前綴,例如 NSObject 或 NSButton 來清楚分別它們屬于MacO

4、SX 核心;使用“NS”是由于這些類別的名稱在 NeXTSTEP 開發(fā)時定下。雖然 Objective-C 是 C的母集,但它也不視 C 的基本型別為第一級的對象。和 C+不同,Objective-C 不支援運算子多載(它不支持 ad-hoc 多型)。亦與 C+不同,但和Java 相同,Objective-C 只容許對象繼承一個類別(不設多重繼承)。 Categories 和 protocols 不但可以提供很多多重繼承的好處,而且沒有很多缺點,例如額外執(zhí)行時間過重和二進制不兼容。Objective-C 排行榜思緒飛奔的黎明,一股股傾斜的香氣從不知名的地方飄來,像麥的純TIOBE20105 月

5、編程語言榜已于近日發(fā)布,本期主要變化是 Objective-C 排名進入前十。盡管Objective-C 的份額在上個月只達到 0.08%,但卻在排名上邁出了重要一步首次進入前十名。這一步的意義重大,要知道,2001 年 6月 TIOBE 編程榜發(fā)布以來,總體只有 13 個編程語言曾經進入前十名。Objective-C 流行的主要原因可能是它是唯一一種可以為 iphone 和 ipad 編程的語言。但單從編程語言的角度來看,誕生于 1986 年的Object-c 并沒有表現出多少新意。TIOBE2010 年 6 月份編程語言榜已于近日發(fā)布,Objective-C排名繼續(xù)爬升,從第10名上升到第

6、 9 名。由此可見,Objective-C 具有很大的發(fā)展空間。Objective-C 和 C+的比較單一繼承:Objective-C 不支持多重繼承,(同 Java 和Smalltalk),而 C+語言支持多重繼承。動態(tài):思緒飛奔的黎明,一股股傾斜的香氣從不知名的地方飄來,像麥的純Objective-C 是動態(tài)定型(dynamicalytyped)所以它的類庫比 C+要容易操作。Objective-C在運行時可以允許根據字符串名字來訪問方法和類,還可以動態(tài)連接和添加類。C+跟從面向對象編程里的 Simula67(一種早 期 OO 語 言 ) 學 派 , 而 Objecive-C 屬 于Sma

7、lltalk 學派。在 C+里,對象的靜態(tài)類型決定你是否可以發(fā)送消息給它,而對 Objective-C 來說,由動態(tài)類型來決定。Simula67 學派更安全,因為大部分錯誤可以在編譯時查出。而 Smalltalk 學派更靈活,比 如 一些 Smalltalk 看 來無 誤的 程序 拿 到Simualr67 那里就無法通過。從很多方面來看,C+和 Objective-C 的差別,與其說時技術上的,不如說是思維方式上的。你是否想更安全而舍棄靈活性?Simular67 學派的支持者聲稱既然程序設計出色何必再要靈活性,而 Smalltalk 學派則辯稱為了靈活可以容忍運行時多出錯。Objective-

8、C 簡明教程思緒飛奔的黎明,一股股傾斜的香氣從不知名的地方飄來,像麥的純前言開始學習前,假設你已經具備了一些 C 語言的基礎知識,包括變量類型、函數、返回值、以及指針的相關概念。如果對這些還不了解,建議首先學習譚浩強的C 程序設計。Objective-C,是C的衍生體,繼承了所有C語言的特性。是有一些例外,但是它們不是繼承于 C 的語言特性本身。nil:在 C/C+你或許曾使用過 NULL,而在Objective-C 中則是 nil。不同之處是你可以傳遞訊息給 nil(例如nilmessage;),這是完全合法的,然而你卻不能對 NULL 如法炮制。 BOOL:C 沒 有 正 式 的 布 爾

9、類 型 , 而 在Objective-C 中也不是真的有。它是包含在Foundationclasses( 基 本 類 別 庫 ) 中 ( 即importNSObject.h;nil 也是包括在這個標頭檔內)。BOOL 在 Objective-C 中有兩種型態(tài):YES 或NO,而不是 TRUE 或 FALSE。 importvsinclude: 就 如 同 你 在思緒飛奔的黎明,一股股傾斜的香氣從不知名的地方飄來,像麥的純helloworld 范例中看到的,我們使用了 import。import 由 g 編譯器支援。我并不建議使用include,import 基 本 上 跟 .h 檔 頭 尾 的

10、ifndefdefineendif 相同。許多程式員們都同意,使用這些東西這是十分愚蠢的。無論如何,使用import 就對了。這樣不但可以避免麻煩,而且萬一有一天 g 把它拿掉了 , 將會有足夠的Objective-C 程式員可以堅持保留它或是將它放回來。偷偷告訴你,Apple 在它們的程式碼中也使用了 import。所以萬一有一天這種事真的發(fā)生,不難預料 Apple 將會提供一個支援 import 的 g分支版本。Objective-C 中,method 及 message 這兩個字是可以互換的。不過 messages 擁有特別的特性,具體區(qū)別在後面介紹。編譯 helloworldhello

11、.mimportintmain(intargc,constchar*argv)思緒飛奔的黎明,一股股傾斜的香氣從不知名的地方飄來,像麥的純printf(helloworldn);return0;輸出helloworld在 Objective-C 中 使用 import 代替includeObjective-C 的預設副檔名是.m創(chuàng)建 classeinterface基于ProgramminginObjective-C,Copyright(C)2004bySamsPublishing 一書中的范例,并經過允許而刊載。Fraction.himport思緒飛奔的黎明,一股股傾斜的香氣從不知名的地方飄來

12、,像麥的純interfaceFraction:NSObjectintnumerator;intdenominator;-(void)print;-(void)setNumerator:(int)n;-(void)setDenominator:(int)d;-(int)numerator;-(int)denominator;endNSObject:NeXTStepObject 的縮寫。因為它已經改名為 OpenStep,所以這在今天已經不是那麼有意義了。繼承(inheritance)以 Class:Parent 表示,就像上面的 Fraction:NSObject。思緒飛奔的黎明,一股股傾斜的香

13、氣從不知名的地方飄來,像麥的純 夾 在 interfaceClass:Parent. 中的稱為 instancevariables。沒有設定存取權限(protected,public,private)時,預設的存取權限為 protected。設定權限的方式將在稍後說明。 Instancemethods 跟 在 成 員 變 數 ( 即instancevariables)後。格式為 :scope(returnType)methodName:(parameter1Type)parameter1Name;scope有class或instance 兩種。instancemethods以-開頭,classlevelmethods 以+開頭。Interface 以一個end 作為結束。原生的 HelloWorld 代碼importintmain(intargc,constchar*argv)NSAutoreleasePool*pool=NSAutoreleasePoolallocinit;思緒飛奔的黎明,一股股傾斜的香氣從不知名的地方飄來,像麥的純/insertcodehere.NSLog(Hello,World!);pooldrain;return0;以上是Xcode開發(fā)環(huán)境下默認的.m文件內容,就是原生的 HelloWorld 范例代碼。關于 hellow

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論