成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Objective-C入門教材

移動(dòng)開發(fā) iOS
閱讀本文前,你也要了解面向?qū)ο蟮幕靖拍睢?duì)象的使用以及面象對(duì)象設(shè)計(jì)模式都是bjective-C進(jìn)行面向?qū)ο缶幊毯驮O(shè)計(jì)Cocoa程序的基礎(chǔ), 理解它們是如何相互影響的是編寫你的應(yīng)用的關(guān)鍵。

Objective-C是一種簡(jiǎn)單的計(jì)算機(jī)語言,它可以用來設(shè)計(jì)復(fù)雜的面向?qū)ο蟪绦颉?Objective-C擴(kuò)展了標(biāo)準(zhǔn)ANSI C語言,增加了一些定義類、方法以及其它結(jié)構(gòu)的語法,提升了類的動(dòng)態(tài)擴(kuò)展。

重點(diǎn): 本文檔沒有教授任何有關(guān)于C語言的知識(shí)。如果你還不熟悉C語言,閱讀本文之前應(yīng)該學(xué)習(xí)一下C語言的基礎(chǔ)知識(shí)。

如果你已經(jīng)熟悉C語言,并且之前使用過面向?qū)ο笳Z言編寫過程序,下面的內(nèi)容將會(huì)幫助你學(xué)習(xí)Objective-C的基礎(chǔ)語法。 許多傳統(tǒng)面向?qū)ο蟮乃枷耄热绶庋b、繼承、多態(tài),都會(huì)在Objective-C中體現(xiàn)。 雖然也有一些重要的不同點(diǎn),但這些不同點(diǎn)都會(huì)在這篇文章中提到,如果需要有更多詳細(xì)信息可用。

Objective-C: C語言的超集

Objective-C是C語言ANSI版本的超集,支持和C相同的基本語法。用C代碼,你可以定義頭文件和源碼文件, 以從詳細(xì)實(shí)現(xiàn)的代碼中分離出公開的聲明。 Objective-C頭文件下面列出的擴(kuò)展名 Table 1-1.

Table 1-1 Objective-C代碼的文件擴(kuò)展名擴(kuò)展名文件類型

擴(kuò)展名

文件類型

.h

頭文件。頭文件包含類、類型、函數(shù)、常量的聲明。

.m

源碼文件。這是源碼文件的典型擴(kuò)展名,可以包含Objective-C和C代碼。

.mm

源碼文件。使用該擴(kuò)展名的源文件除了Objective-C和C代碼,還可以包含C++代碼。 該擴(kuò)展名僅用于在你的Objective-C代碼中引用到的C++類和特性。

當(dāng)你想在你的代碼中包含頭文件時(shí),你可以使用 #import 指令。 它比較像 #include, 除了它必須要確定相同文件不能被包含多次。 Objective-C的示例和文檔都更喜歡使用 #import, 你的代碼應(yīng)該也這樣。

和大多數(shù)其它面向?qū)ο笳Z言一樣,Objective-C里的類也提供基本的結(jié)構(gòu),用來封裝帶有行為的一些數(shù)據(jù)。 一個(gè)對(duì)象是一個(gè)類的運(yùn)行實(shí)例,包含類中聲明變量的實(shí)例在內(nèi)存中的復(fù)制,以及指向該類的方法。

Objective-C中類的定義,要求兩個(gè)明顯的部分:接口和實(shí)現(xiàn)。 接口部分包含類的聲明、定義成員變量,及與此類關(guān)聯(lián)的方法。 接口通常在a .h 文件里。實(shí)現(xiàn)部分包含類的方法實(shí)際代碼。實(shí)現(xiàn)通常在 a .m 文件里。

圖1-1 展示聲明MyClass類的語法, 它繼承自Cocoa的基類 NSObject。 這個(gè)類的聲明開始于 @interface 編譯指令,結(jié)束于 @end 指令。僅跟著類名的(以冒號(hào)分割)是父類名。 類的實(shí)體變量(有時(shí)簡(jiǎn)稱ivars,在一些其它語言中稱作成員變量)聲明在以大括號(hào)({和})括起來的代碼塊中。 實(shí)體變量后面是類的方法聲明列表。以分號(hào)做為每個(gè)實(shí)體變量和方法的結(jié)束標(biāo)記。

A class declaration
圖1-1 定義一個(gè)類

小提示: 這個(gè)接口只聲明了方法,類也可以聲明 屬性。 了解屬性的更多信息, 請(qǐng)查看 “聲明屬性”.

Objective-C支持包含對(duì)象的強(qiáng)弱兩個(gè)類型的變量。 在變量聲明時(shí),強(qiáng)類型的變量包含類名,弱類型的變量使用類型 id 代替對(duì)象。 弱類型變量在像集合類中使用頻繁,在一個(gè)集合中的對(duì)象的實(shí)際類型可能是未知的。如果你使用過強(qiáng)類型的語言, 你可能會(huì)認(rèn)為使用弱類型會(huì)引起問題,但是在Objective-C程序中它們實(shí)際上提供了很大的靈活性和更強(qiáng)大的動(dòng)態(tài)性。

下面的例子展示了強(qiáng)類型和弱類型變量的聲明格式:

  1. MyClass *myObject1; // 強(qiáng)類型 
  2.  
  3. id myObject2; // 弱類型 

注意在第一個(gè)聲明里的 * 號(hào)。在Objective-C中,對(duì)象的引用叫指針。如果你對(duì)指針沒有很清晰的認(rèn)識(shí), 不用擔(dān)心,不是必須要成為一個(gè)指針專家才能使用Objective-C進(jìn)行編程的。你只要記住在聲明強(qiáng)類型對(duì)象的變量名前加上 * 就可以了。 弱類型 id 本身就意味著是個(gè)指針。

方法和通信

Objective-C中的類可以聲明兩種類型的方法:實(shí)體方法和類方法。 一個(gè)實(shí)體方法是在這個(gè)特定類的實(shí)例中才能執(zhí)行的方法,換句話說, 在調(diào)用實(shí)體方法前,你必須首先要?jiǎng)?chuàng)建這個(gè)類的實(shí)例。類方法,相對(duì)的,不需要?jiǎng)?chuàng)建實(shí)例。 當(dāng)然更可以在創(chuàng)建實(shí)例之后調(diào)用。

方法的聲明由方法的類型標(biāo)識(shí)符、一個(gè)返回值類型、一個(gè)或多個(gè)簽名關(guān)鍵字、參數(shù)類型和名稱信息組成。 圖1-2 展示實(shí)體方法 insertObject:atIndex:的聲明格式。

Method declaration syntax
圖1-2 方法聲明的語法

聲明開始于減號(hào)(-) ,減號(hào)用來標(biāo)識(shí)這是一個(gè)實(shí)體方法。這個(gè)方法的實(shí)際名稱 (insertObject:atIndex:) 是所有簽名關(guān)鍵字的拼接,包括冒號(hào)。 冒號(hào)聲明了當(dāng)前的參數(shù).如果方法沒有參數(shù),你就可以省略第一個(gè)簽名關(guān)鍵字。 在這個(gè)例子中,該方法有兩個(gè)參數(shù)。

當(dāng)你想調(diào)用這個(gè)方法時(shí),你可以通過向?qū)ο?通信 。 通信內(nèi)容是方法簽名和方法要求參數(shù)信息。

信息是用中括號(hào) ([ 和 ])包裹的。 在中括號(hào)里面,接收信息的對(duì)象在左邊,信息(包括信息要求的參數(shù))在右邊。 例如,發(fā)送信息insertObject:atIndex: 到變量名為 myArray 的對(duì)象,你會(huì)用到下面的語法:

  1. [myArray insertObject:anObject atIndex:0]; 

為了避免聲明多個(gè)局部變量來保存臨時(shí)結(jié)果, Objective-C允許你嵌套信息。來自每個(gè)嵌套信息中的返回值,可以被用做參數(shù)、目標(biāo)、或另一個(gè)信息。 例如,你可以用信息來代替前面例子中任意使用過的變量。從而,如果你有一個(gè)叫 myAppObject 的對(duì)象,它有訪問數(shù)組對(duì)象和將對(duì)象插入數(shù)組的方法, 你可以將前面的例子寫成像下面這樣:

  1. [[myAppObject theArray] insertObject:[myAppObject objectToInsert] atIndex:0]; 

Objective-C也提供用句點(diǎn)來調(diào)用 存取器方法。 存取器方法獲取和設(shè)置一個(gè)對(duì)象的狀態(tài), 典型的格式為 -(type)propertyName 和 -(void)setPropertyName:(type)。 使用句點(diǎn)語法,你可以將前面的例子重寫成:

  1. [myAppObject.theArray insertObject:[myAppObject objectToInsert] atIndex:0]; 

你也能使用句點(diǎn)語法賦值:

  1. myAppObject.theArray = aNewArray

用不同語法寫也比較簡(jiǎn)單, [myAppObject setTheArray:aNewArray];.

盡管前面的例子都是發(fā)送信息給一個(gè)類的實(shí)例,你也可以發(fā)送信息到類本身。 當(dāng)你要通信到一個(gè)類,你指定的方法必須被定義成一個(gè)類方法,而非實(shí)體方法。

典型的,你使用類方法來創(chuàng)建類的新實(shí)例,或訪問有關(guān)此類的一些共享信息。 類方法的聲明語法除了一點(diǎn)不同,其它完全和實(shí)體方法一樣。 用加號(hào)(+)來代替用減號(hào)(-)作為方法類型的標(biāo)識(shí)符。

下面的例子就是來說明如何使用類方法作為一個(gè)類的工廠方法。 在這個(gè)例子中,方法 array 是類 NSArray 的類方法—繼承自 NSMutableArray— 它用于分配和初始化該類的新實(shí)例并將它的返回到代碼中。

  1. NSMutableArray *myArray = nil; // nil等同NULL 
  2.  
  3. // 創(chuàng)建一些新數(shù)組并賦給變量myArray。 
  4.  
  5. myArray = [NSMutableArray array]; 

清單1-1 展示類了在前面例子中 MyClass 類的實(shí)現(xiàn)代碼。 像類的聲明一樣,類的實(shí)現(xiàn)通過兩個(gè)編譯指令識(shí)別 —這里, @implementation 和 @end。 這些指令提供編譯器需要的范圍信息,來定位相對(duì)應(yīng)類的封閉方法。 方法的聲明要匹配接口中相應(yīng)的聲明,不包括代碼塊里的內(nèi)容。

清單1-1 一個(gè)類的實(shí)現(xiàn)

  1. @implementation MyClass 
  2.  
  3. - (id)initWithString:(NSString *)aName 
  4.  
  5.  
  6. self = [super init]; 
  7.  
  8. if (self) { 
  9.  
  10. name = [aName copy]; 
  11.  
  12.  
  13. return self; 
  14.  
  15.  
  16. + (MyClass *)createMyClassWithString: (NSString *)aName 
  17.  
  18.  
  19. return [[[self alloc] initWithString:aName] autorelease]; 
  20.  
  21.  
  22. @end 

聲明屬性

聲明屬性是代替聲明及簡(jiǎn)單實(shí)現(xiàn)存取器方法的方便形式。

在類接口里,可以包含屬性聲明和方法聲明。 基本的定義用 @property 編譯指令, 之后是類型信息和屬性名稱。 你也可以定制配置屬性,比如定義存取器方法如何執(zhí)行。 下面的例子展示一個(gè)簡(jiǎn)單屬性的聲明:

  1. @property BOOL flag; 
  2.  
  3. @property (copy) NSString *nameObject; // 在賦值時(shí)復(fù)制對(duì)象。 
  4.  
  5. @property (readonly) UIView *rootView; //聲明一個(gè)只讀方法 

每個(gè)可讀屬性指定一個(gè)與該屬性同名的方法。 每個(gè)可寫屬性指定一個(gè)額外的方法,格式為 setPropertyName, 屬性名的首字母要大寫。

在你的類的實(shí)現(xiàn)里,你可以使用 @synthesize 編譯指令來要求編譯器依照聲明規(guī)格創(chuàng)建方法:

  1. @synthesize flag; 
  2.  
  3. @synthesize nameObject; 
  4.  
  5. @synthesize rootView; 

你可以合并 @synthesize 語句到一行中,如果你愿意:

  1. @synthesize flag, nameObject, rootView; 

從實(shí)際上說,屬性減少了你不得不寫的冗長(zhǎng)代碼的數(shù)量。 因?yàn)榇蠖鄶?shù)存取器方法都是以類似的方式執(zhí)行的,屬性去掉了類中公開的每個(gè)屬性實(shí)現(xiàn)讀寫方法的重復(fù)。 相反的,你只要指定你想使用屬性的行為,會(huì)在編譯時(shí)生成實(shí)際的讀寫方法。

要了解如何在你的類中聲明屬性,請(qǐng)查看 “聲明屬性” 在 Objective-C編程語言里。

字符串

作為C語言的超集,Objective-C和C語言一樣在指定字符串上支持相同的約定。 換句話說,字符用單引號(hào)包裹、字符串用雙引號(hào)包裹。 可是Objective-C框架典型的是不使用C語言式的字符串。他們以 NSString 對(duì)象的方式傳遞字符串。

NSString 類提供一個(gè)對(duì)象封裝字符串,這樣可以具有你想要的所有優(yōu)點(diǎn),包括為任意長(zhǎng)度的字符串創(chuàng)建內(nèi)存管理、 支持Unicode、 printf-式的格式化工具集,還有更多。 因?yàn)檫@樣的字符串使用很普遍,Objective-C提供一個(gè)快捷方式來根據(jù)常量創(chuàng)建 NSString 對(duì)象. 要使用這種快捷方式,你必須在普通雙引號(hào)字符串前加 @ 符號(hào),下面的例子就做了展示:

  1. NSString *myString = @"My String\n"; 
  2.  
  3. NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"]; 
  4.  
  5. // 根據(jù)C式字符串創(chuàng)建Objective-C字符趾 
  6.  
  7. NSString *fromCString = [NSString stringWithCString:"A C string" encoding:NSASCIIStringEncoding]; 

協(xié)議

一個(gè)協(xié)議聲明的方法可以被任意類實(shí)現(xiàn)。 協(xié)議本身沒有類。他們只是簡(jiǎn)單地定義一個(gè)接口讓其它對(duì)象可靠的實(shí)現(xiàn)。 當(dāng)你在你的類里實(shí)現(xiàn)一個(gè)協(xié)議的方法時(shí),就可以說你的類符合那個(gè)協(xié)議了。

協(xié)議被頻繁用于為 委拖 對(duì)象指定接口。 看協(xié)議、委托以及其它對(duì)象之間的相互作用的最好方式,就是看一個(gè)例子。

UIApplication 類實(shí)現(xiàn)一個(gè)應(yīng)用程序要求的行為。 不用強(qiáng)迫你實(shí)現(xiàn)子類 UIApplication 來接收有當(dāng)前程序狀態(tài)的簡(jiǎn)單通知。而是 UIApplication 類通過調(diào)用它分配的委托對(duì)象的具體方法來發(fā)送那些通知。 實(shí)現(xiàn) UIApplicationDelegate 協(xié)議方法的對(duì)象能接收那些通知,并提供恰當(dāng)?shù)拇饛?fù)。 通過將協(xié)議的名稱用“<>”包裹起來放到它繼承的類后面,來指定你的類遵循或采用的協(xié)議。 你不用去聲明你實(shí)現(xiàn)協(xié)議的方法。

  1. @interface MyClass : NSObject { 
  2.  
  3.  
  4. @end 

協(xié)議的聲明看起來比較類似一個(gè)類的接口,不同的是協(xié)議沒有父類也不能定義實(shí)體變量。 下面的例子展示了含有一個(gè)方法的簡(jiǎn)單協(xié)議:

  1. @protocol MyProtocol 
  2.  
  3. - (void)myProtocolMethod; 
  4.  
  5. @end 

在很多委托協(xié)議的示例中,采用一個(gè)協(xié)議類似實(shí)現(xiàn)協(xié)議中定義的方法。 有些協(xié)議要求你明確說明你支持的協(xié)議,協(xié)議可以指定必選和可選方法。 當(dāng)你要將你的開發(fā)推進(jìn)到更深層次,無論如何,你應(yīng)該花稍多時(shí)間去學(xué)習(xí)協(xié)議及如何使用它們-- “協(xié)議” in Objective-C編程語言.

更多信息

上述內(nèi)容主要是想讓你熟悉Objective-C語言的基礎(chǔ)。 這里介紹的主題覆蓋了你通讀文檔時(shí)最可能遇到的語言功能。

責(zé)任編輯:佚名 來源: cnblogs
相關(guān)推薦

2010-11-04 16:32:00

Objective-C

2011-05-11 15:19:01

CocoaObjective-C

2011-07-06 14:41:34

Objective-C

2010-09-01 09:19:33

Objective-CiPhone開發(fā)iPhone

2011-08-10 18:07:29

Objective-C反射

2013-06-20 10:40:32

Objective-C實(shí)現(xiàn)截圖

2013-03-27 12:54:00

iOS開發(fā)Objective-C

2011-05-11 11:20:26

Objective-C

2011-07-06 14:12:14

Objective-C

2011-08-17 12:03:36

Objective-C

2011-05-11 13:54:08

Objective-C

2011-05-11 15:45:50

內(nèi)存管理Objective-C

2011-08-02 13:16:36

Objective-C 語法 函數(shù)

2011-08-04 11:15:46

Objective-C 構(gòu)造函數(shù) 構(gòu)造方法

2011-05-11 14:06:49

Objective-C

2011-08-04 14:58:37

Objective-C Cocoa NSString

2013-08-21 14:57:42

objective-c問題

2011-08-03 16:55:05

Objective-C 代理

2011-08-04 09:35:09

Objective-C 編碼規(guī)范

2014-04-30 10:16:04

Objective-CiOS語法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 91www在线观看 | 久久精品美女 | 国产专区免费 | 中文精品视频 | 九九在线 | 视频一区在线观看 | 香蕉视频在线播放 | 国产黄色在线观看 | 成人在线日韩 | 午夜欧美一区二区三区在线播放 | 观看av | 99爱视频 | 黄免费观看视频 | 日本三级网站在线观看 | 九色在线视频 | 狠狠狠色丁香婷婷综合久久五月 | 亚洲精品一区二三区不卡 | 欧美在线观看网站 | 成人在线免费视频观看 | 精品国产乱码一区二区三 | 欧美日韩亚洲一区 | 天天干狠狠 | 亚洲视频在线播放 | 国产精品国产a级 | 亚洲精品在线观看网站 | 久久免费精彩视频 | 久久久久久久电影 | 国产精品高潮呻吟 | 日本激情视频在线播放 | 91精品国产高清一区二区三区 | 在线观看免费毛片 | 谁有毛片 | 婷婷色网 | 日本免费视频在线观看 | 国产乱码精品一区二区三区五月婷 | 爱爱无遮挡 | www国产成人免费观看视频,深夜成人网 | 久久99国产精品 | 狠狠爱视频 | 观看av | 久久av一区 |