偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

初學(xué)者開(kāi)發(fā)文檔:Objective-C語(yǔ)言學(xué)習(xí)基礎(chǔ)

移動(dòng)開(kāi)發(fā) iOS
本文主要來(lái)介紹Objective-C是怎么在語(yǔ)言中實(shí)現(xiàn)這些概念的,同時(shí)也演示一下真正的Objective-C的代碼是怎么樣的。

Objective-C語(yǔ)言學(xué)習(xí)基礎(chǔ)是本文要介紹的內(nèi)容,在面向對(duì)象編程中必須具有的最基本的功能是向對(duì)象發(fā)送消息。在Objective-C中,我們采用以下的結(jié)構(gòu)發(fā)送消息:

  1. [receiver message]; 

receiver是你要向它發(fā)送消息的對(duì)象,message是你要接收對(duì)象執(zhí)行的method。例如,假設(shè)在我們的程序中有一個(gè)對(duì)象dataTable,我們想要更新它的數(shù)據(jù)。要這樣做,我們要在程序中包含以下的語(yǔ)句,給數(shù)據(jù)表發(fā)送消息:

  1. [dataTable reloadData]; 

在Objective-C的method中,參數(shù)用冒號(hào)進(jìn)行標(biāo)記。

  1. [textField setEditable:YES]; 

你可以有多個(gè)參數(shù),每個(gè)以冒號(hào)為引導(dǎo)。消息也可以進(jìn)行嵌套,如果參數(shù)類型和返回類型是一致的話。例如,我們可以讀取滾動(dòng)條的值并把它在文本區(qū)內(nèi)顯示出來(lái)。

  1. [textField setDoubleValue:[slider doubleValue]]; 

這里,[slider doubleValue]是[textField setDoubleValue: ]的參數(shù)。doubleValue命令返回值為double類型,與setDoubleValue的輸入?yún)?shù)類型一致。

關(guān)于數(shù)據(jù)類型,在Objective-C中,對(duì)象的類型全部為id。id類型的變量?jī)H僅只是對(duì)象的描述符而已。事實(shí)上,它們是指向?qū)ο髷?shù)據(jù)結(jié)構(gòu)的指針,這個(gè)超出了我們討論的范圍。在代碼中,我們象使用其它變量一樣,產(chǎn)生指向?qū)ο蟮淖兞俊?/p>

  1. id anObject; 

在Objective-C中,缺省的返回?cái)?shù)據(jù)類型為id。所以,如果你的method沒(méi)有指定返回類型,它會(huì)自動(dòng)分配為id。

也可以把一個(gè)數(shù)據(jù)變量的類型指定為特定的類。這稱作靜態(tài)類型。所有指向?qū)ο蟮淖兞繉?shí)際上都是指向它們內(nèi)存位置的指針。這種實(shí)現(xiàn)方式在多數(shù)情況下,對(duì)編程人員是透明的。當(dāng)然,如果是靜態(tài)類型的話,就不是透明的了。

當(dāng)我們創(chuàng)建一個(gè)id類型的變量,事實(shí)上它隱含為一個(gè)對(duì)象的指針。id定義為指針類型——一個(gè)對(duì)象的標(biāo)識(shí)。但如果你有一個(gè)指向字符串的變量,而且你象把它靜態(tài)聲明為NSString,你必須在代碼中顯式地聲明這個(gè)變量是一個(gè)指針。這可以通過(guò)C的指針聲明來(lái)實(shí)現(xiàn):

  1. NSString *aString; 

變量名前面的星號(hào)不是變量名的一部分,而是表明aString是NSString這個(gè)對(duì)象的指針。這是你唯一需要知道的關(guān)于對(duì)象變量的指針屬性的知識(shí)。只有在聲明新的變量的時(shí)候才需要使用C的指針結(jié)構(gòu)。在你隨后引用aString的時(shí)候,它就好象其它變量一樣。

如果你對(duì)指針或C語(yǔ)言本身不熟悉,可以參考Brian Kerrnighan和Dennis Ritchie(C語(yǔ)言的作者)編寫的《C編程語(yǔ)言》。另外,我還想推薦Steve Oulline編寫的《使用C編程》。

其它產(chǎn)生嵌套method的方法

現(xiàn)在我們有一個(gè)對(duì)象的數(shù)據(jù)類型,我們可以用與上面不同的方式產(chǎn)生嵌套的method。一個(gè)返回id類型的消息可以作為其它消息的接收者。

  1. double number;  
  2. number=[anArray lastObject] doubleValue]; 

當(dāng)然,我們假定[anArray lastObject]返回的對(duì)象能夠相應(yīng)doubleValue這個(gè)消息。我們擁有了一個(gè)對(duì)象的陣列。[anArray lastObject]返回的對(duì)象處于陣列的最頂端,然后它接收到一個(gè)doubleValue的消息。

在Objective-C中定義新的類

現(xiàn)在,我想和你討論在Objective-C源代碼中如何定義一個(gè)新的類。按照界面和實(shí)現(xiàn)分開(kāi)的精神,Objective-C在兩個(gè)分開(kāi)的文件中定義新的類——一個(gè)界面文件和一個(gè)實(shí)現(xiàn)文件。

界面文件包括使用類所需要的全部信息,包括所有實(shí)例變量的聲明和method的定義。程序員通過(guò)研究界面文件了解哪一個(gè)類適合使用。實(shí)現(xiàn)文件包括method如何實(shí)現(xiàn)的源代碼。

一個(gè)類的界面和實(shí)現(xiàn)往往分在兩個(gè)文件中,雖然對(duì)編譯器來(lái)說(shuō)并沒(méi)有這樣的強(qiáng)制要求。實(shí)現(xiàn)文件的后綴為:.m,也就是Objective-C源文件的擴(kuò)展名。界面文件的擴(kuò)展名為.h,和C語(yǔ)言的頭文件是一樣的。類文件的名字通常與類的名字一樣,雖然這也不是編譯器的強(qiáng)制要求。這樣,一個(gè)叫“Circle”的類會(huì)在文件Circle.h和Circle.m中定義。

界面文件

界面文件聲明構(gòu)成類的實(shí)例變量和method。一個(gè)界面文件的結(jié)構(gòu)為:

  1. @interface 類的名字 : 它的超類的名字  
  2. {  
  3. 實(shí)例變量的聲明  
  4. }  
  5. method的聲明  
  6. @end 

界面聲明總以編譯器指令@interface開(kāi)始,@end結(jié)束。在***行跟在@interface之后的是類的名字。在類的名字后面是一個(gè)冒號(hào),這之后是你的類所繼承的類的名字——它的超類。如果你沒(méi)有指定超類,那么它就會(huì)假定你是在創(chuàng)建一個(gè)新的根類,就好象Cocoa中的NSObject一樣。

***行以后在大括號(hào)內(nèi)的是實(shí)例變量的聲明。這是method所要操作的類的數(shù)據(jù)結(jié)構(gòu)。在我們假設(shè)的Circle類中,實(shí)例變量的聲明也許會(huì)是這樣的:

  1. double radius;  
  2. double xLacation;  
  3. double yLocation;  
  4. NSColor *color; 

實(shí)例變量的變量聲明總是以數(shù)據(jù)類型在前面。后面我們會(huì)學(xué)到,NSColor是操作顏色的應(yīng)用庫(kù)的類。

在實(shí)例變量聲明之后是method的聲明。象標(biāo)準(zhǔn)的C函數(shù),Objective-C中的method有返回值和輸入?yún)?shù)。另外,method既可以是類的也可以是實(shí)例的。類method只能由前面討論過(guò)的類對(duì)象來(lái)調(diào)用,而實(shí)例method則可以由類的任何對(duì)象來(lái)調(diào)用。method名前面的加號(hào)表示這是一個(gè)類method。

  1. + alloc 

以減號(hào)開(kāi)頭的method聲明表示這是一個(gè)實(shí)例method。

  1. - (void) setXLocation: (double)x YLocation: (double)y; 

method的返回值由method名前面括號(hào)內(nèi)的類型確定。參數(shù)跟在冒號(hào)之后,多個(gè)參數(shù)由參數(shù)名和空格分開(kāi)。象method的返回類型一樣,參數(shù)的數(shù)據(jù)類型也是由參數(shù)名前面括號(hào)內(nèi)的類型決定。

如果一個(gè)類與它的超類由關(guān)聯(lián),應(yīng)該導(dǎo)入它的超類的界面文件,通常是超類的名字后面加上.h構(gòu)成。

  1. #import "ItsSuperclass.h" 

#import語(yǔ)句的作用和你也許已經(jīng)很熟悉的#include很相似——區(qū)別只是#import更智能化一些。#import***的優(yōu)勢(shì)在于它自動(dòng)檢查一個(gè)文件是否已經(jīng)被導(dǎo)入過(guò),而不會(huì)重復(fù)進(jìn)行導(dǎo)入。#include并不進(jìn)行這個(gè)檢查。

實(shí)現(xiàn)文件

實(shí)現(xiàn)文件是你的類的代碼核心部分。這個(gè)文件包括你使得你的method運(yùn)作的所有代碼——使得你的類能夠完成一些有意義的工作。界面文件使你的類的描述性部分,使其它程序員編寫的代碼可以與你的類一起工作。實(shí)現(xiàn)文件使你的類完成需要的工作。

實(shí)現(xiàn)文件的格式與界面文件的有些類似:

  1. #import "類名.h"  
  2. @implementation 類名 : 超類名  
  3. {  
  4. 實(shí)例變量聲明  
  5. }  
  6. method定義  
  7. @end 

每個(gè)類的實(shí)現(xiàn)都必須引用它的界面文件。因?yàn)榻缑嫖募幸呀?jīng)聲明了你所繼承的超類,因此這部分可以省略。這更加明確了實(shí)現(xiàn)文件主要關(guān)于method實(shí)現(xiàn)的概念。這樣,在實(shí)踐中,實(shí)現(xiàn)文件只需要以下的代碼:

  1. #import "類名.h"  
  2. @implementation 類名  
  3. method定義  
  4. @end 

method的定義和C函數(shù)的定義類似。名字應(yīng)該與界面文件完全一致(沒(méi)有分號(hào)),method的實(shí)現(xiàn)代碼包括在名字后面的一對(duì)大括號(hào)中。例如,我們的Circle類的method為:

  1. + alloc  
  2. {  
  3. 你的代碼  
  4. }  
  5. - (void)setXLocation: (double)x YLocation: (double)y  
  6. {  
  7. 你的代碼  

你也許會(huì)奇怪為什么+ alloc沒(méi)有返回值。Objective-C的缺省返回值是id——也就是說(shuō),它缺省返回一個(gè)對(duì)象。+ alloc這個(gè)method設(shè)計(jì)為返回類的一個(gè)對(duì)象,因此沒(méi)有必要指明返回值。在提到+ alloc這個(gè)method時(shí),我要指出你很少需要自己實(shí)現(xiàn)這個(gè)method。NSObject這個(gè)類會(huì)處理這個(gè)問(wèn)題。+ alloc的目的是為新創(chuàng)建的對(duì)象分配內(nèi)存。下面的內(nèi)容會(huì)涉及創(chuàng)建新對(duì)象的細(xì)節(jié)。

實(shí)例變量可以在你的method中直接引用。不需要特別指明,所有實(shí)例變量與method處于同一個(gè)名域。它們就象C中全局變量。這樣,我們可以象下面那樣定義第二個(gè)method:

  1. - (void)setXLocation: (double)x YLocation: (double)y  
  2. {  
  3. xxLocation = x;  
  4. yyLocation = y;  

另外,也可以定義局部變量,它們具有更加局限的作用區(qū)域。例如,在上面的第二個(gè)method中,我們可以添加一個(gè)沒(méi)用的中間變量:

  1. - (void)setXLocation: (double)x YLocation: (double)y  
  2. {  
  3. double tempX;  
  4. double tempY;  
  5. tempX = x;  
  6. tempY = y;  
  7. xLocation = tempX;  
  8. yLocation = tempY;  

你會(huì)發(fā)現(xiàn)任何可以應(yīng)用于標(biāo)準(zhǔn)C函數(shù)的,都可以應(yīng)用于類的method。

創(chuàng)建新對(duì)象

要?jiǎng)?chuàng)建一個(gè)新對(duì)象,你可以向你想創(chuàng)建的實(shí)例所屬的類的類對(duì)象發(fā)送一個(gè)alloc消息。例如,我想創(chuàng)建Circle類的一個(gè)實(shí)例,我們可以這樣做:

  1. id aCircle;  
  2. aCircle = [Circle alloc]; 

記住,alloc返回一個(gè)對(duì)象,所以你打算存儲(chǔ)你所創(chuàng)建的實(shí)例的變量應(yīng)該是id類型的。一旦創(chuàng)建了新的實(shí)例,我們需要初始化它的實(shí)例變量。這可以想新創(chuàng)建的對(duì)象發(fā)送一個(gè)init消息。

  1. [aCircle init]; 

初始化必須在分配內(nèi)存之后立刻進(jìn)行,所以一般用兩個(gè)嵌套的消息來(lái)完成。

  1. aCircle=[[Circle alloc] init]; 

缺省地,init把所有實(shí)例變量初始化為0。你可以創(chuàng)建你自己的初始化method,也稱為構(gòu)造函數(shù),來(lái)安裝你的需求初始化變量。通常構(gòu)造函數(shù)以“init”開(kāi)頭。因?yàn)闃?gòu)造函數(shù)需要和一個(gè)對(duì)象的實(shí)例變量打交道,所以它應(yīng)該是一個(gè)實(shí)例method,而不是象“alloc”那樣的類method。例如,你可以為我們的Circle類創(chuàng)建一個(gè)構(gòu)造函數(shù),把半徑初始化為10。這個(gè)method應(yīng)該是這樣的:

  1. - (void)initWithRadius: (double)r;  
  2. {  
  3. rradius = r;  

任何沒(méi)有在你的構(gòu)造函數(shù)中初始化的實(shí)例變量缺省地設(shè)置為0。

在Project Builder中

到現(xiàn)在位置,我還沒(méi)有提到Project Builder。但我現(xiàn)在想談到一個(gè)與現(xiàn)在討論有關(guān)的特性。Project Builder包含類的界面和實(shí)現(xiàn)文件的模板。你獲得是一個(gè)繼承自基礎(chǔ)庫(kù)中NSObject類的框架——你所需要做的是用你自己的數(shù)據(jù)結(jié)構(gòu)和method來(lái)填充它。所以,現(xiàn)在你應(yīng)該了解類在源代碼級(jí)的結(jié)構(gòu),同時(shí)也知道怎么簡(jiǎn)單地創(chuàng)建它。

現(xiàn)在我們已經(jīng)基本介紹完入門的知識(shí),下面將要進(jìn)入真實(shí)程序的編程。下一次,我將會(huì)介紹Interface Builder。我們對(duì)Interface Builder的學(xué)習(xí)主要是通過(guò)實(shí)驗(yàn)。

小結(jié):初學(xué)者開(kāi)發(fā)文檔:Objective-C語(yǔ)言學(xué)習(xí)基礎(chǔ)的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!

責(zé)任編輯:zhaolei 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-08-12 10:27:52

Objective-C對(duì)象

2011-08-17 12:03:36

Objective-C

2011-08-05 14:16:47

Objective-C 變量 方法

2011-08-10 19:16:50

Objective-C變量

2011-08-10 16:44:56

iPhone代理設(shè)計(jì)模式

2011-08-01 11:49:05

Objective-C

2011-08-04 14:58:37

Objective-C Cocoa NSString

2011-07-07 17:04:33

iPhone Action Objective-

2011-07-18 14:59:20

iPhone Objective-

2010-01-14 17:18:17

C++語(yǔ)言

2011-08-04 18:01:07

IOS Cocoa Touc

2011-09-14 09:49:41

Android開(kāi)發(fā)

2011-08-15 17:06:01

Objective-CNSLog

2011-08-25 15:51:10

Lua腳本

2011-05-11 11:20:26

Objective-C

2009-06-15 14:08:00

NetbeansJava

2020-09-08 19:03:41

Java代碼初學(xué)者

2011-09-08 10:38:37

Widget

2010-01-15 19:05:42

學(xué)習(xí)C++

2011-08-29 15:45:59

Lua函數(shù)
點(diǎn)贊
收藏

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