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

詳解Objective-C學(xué)習(xí)筆記之面向?qū)ο缶幊?/h1>

移動(dòng)開(kāi)發(fā) iOS
Objective-C學(xué)習(xí)筆記之面向?qū)ο缶幊淌潜疚囊榻B的內(nèi)容,主要詳細(xì)的介紹了面向?qū)ο缶幊痰膬?nèi)容,對(duì)于資深的C++程序員來(lái)說(shuō),面向?qū)ο缶幊滩皇鞘裁葱迈r的概念,先來(lái)看本文內(nèi)容詳解。

Objective-C學(xué)習(xí)筆記之面向?qū)ο?/strong>編程是本文要介紹的內(nèi)容,主要詳細(xì)的介紹了面向?qū)ο?/strong>編程的內(nèi)容,對(duì)于資深的C++程序員來(lái)說(shuō),面向?qū)ο?/strong>編程不是什么新鮮的概念,類(lèi)、對(duì)象、實(shí)例、方法這些概念就不再冗述了。和上一篇 Objective-C學(xué)習(xí)中對(duì) C語(yǔ)言的擴(kuò)展一樣,這篇主要側(cè)重于Objective-C中的OOP,有哪些與我們熟識(shí)的C++不同的概念。

  1. Point : NSObject  
  2. {  
  3.   int X;  
  4.   int Y;  
  5. }  
  6. - (void) SetX: (int) X;  
  7. - (void) SetY: (int) Y;  
  8. - (void) Show;  
  9. // Point 

下面進(jìn)行逐句分析。

“Point”告訴編譯器:“這是為名為Point的新類(lèi)定義的接口。”,而后面的“NSObject”告訴編譯器,Point類(lèi)是基于 NSObject類(lèi)的。該語(yǔ)句表明每個(gè)Point類(lèi)都是一個(gè)NSObject,并且每個(gè)Point都將繼承NSObject類(lèi)定義的所有行為。

花括號(hào)中的內(nèi)容是用于大量創(chuàng)建新Point對(duì)象的模板。它表明,創(chuàng)建新Point對(duì)象時(shí),該對(duì)象由兩個(gè)元素構(gòu)成——X和Y,每個(gè)創(chuàng)建出來(lái)的Point類(lèi)對(duì)象都將擁有自己的X和Y。

隨后的代碼看起來(lái)像是C函數(shù)原型,在Objective-C中,它們稱(chēng)為方法聲明。方法聲明指出每種方法的名稱(chēng)、方法返回值的類(lèi)型和某些參數(shù)。

前面的短線(xiàn)“-”表明這是Objective-C方法的聲明,這是一種區(qū)分函數(shù)原型與方法聲明的方式。

短線(xiàn)后面是方法的返回類(lèi)型,位于圓括號(hào)中,void表示無(wú)返回值。Objective-C方法可以返回與C函數(shù)相同的類(lèi)型:標(biāo)準(zhǔn)類(lèi)型(整型、浮點(diǎn)型和字符型)、指針、對(duì)象引用和結(jié)構(gòu)。

方法類(lèi)型之后是方法名稱(chēng),如果方法使用參數(shù),在名稱(chēng)的結(jié)尾處需要使用冒號(hào)。這個(gè)冒號(hào)是名稱(chēng)的一部分,它告訴編譯器后面會(huì)出現(xiàn)參數(shù)。

參數(shù)的類(lèi)型是在圓括號(hào)中指定的,緊隨其后的是參數(shù)名稱(chēng)。

最后的“Point

  1. - (void) SetX: (int) thisX  
  2. {  
  3.   X = thisX;  
  4. } // SetX  
  5.  
  6. - (void) SetY: (int) thisY  
  7. {  
  8.   X = thisY;  
  9. } // SetY  
  10.  
  11. - (void) Show  
  12. {  
  13.   NSLog(Point at (%d, %d)", X, Y);  
  14. } // Show  
  15. // Point 

下面進(jìn)行逐句分析。

@implementation是一個(gè)編譯器指令,表明它將為某個(gè)類(lèi)提供代碼。類(lèi)名(Point)出現(xiàn)在@implementation之后,該行的結(jié)尾處沒(méi)有分號(hào)。

接下來(lái)是各個(gè)方法的定義,它們不必按照在@interface指令中的順序出現(xiàn)。你甚至可以在@implementation中定義那些在@interface中無(wú)相應(yīng)聲明的方法。可以把它們看成是私有方法,僅在類(lèi)的實(shí)現(xiàn)中使用。

方法定義中的第一行看上去與@interface部分的聲明非常類(lèi)似,二者間的主要差別就是結(jié)尾處沒(méi)有分號(hào),另外還需要注意到我們將方法的參數(shù)重新命名了,@interface部分的方法聲明中使用了名稱(chēng)X和Y,是為了確切告訴讀者參數(shù)的用處。在具體實(shí)現(xiàn)中,我們必須區(qū)分參數(shù)名稱(chēng)和實(shí)例變量名稱(chēng),所以需要將參數(shù)重命名。

SetX方法和SetY方法的結(jié)構(gòu)幾乎一樣,對(duì)于Show方法需要注意,方法名的結(jié)尾處沒(méi)有冒號(hào),說(shuō)明它不使用任何參數(shù)。

最后的“@end”代碼告訴編譯器,我們已經(jīng)完成了Point類(lèi)的實(shí)現(xiàn)。

實(shí)例化對(duì)象

實(shí)例化對(duì)象就是根據(jù)我們前面寫(xiě)好的聲明創(chuàng)建一個(gè)新對(duì)象。為了創(chuàng)建新的對(duì)象,我們先來(lái)熟悉一個(gè)新的操作符——“[]”操作符。

在C語(yǔ)言中,程序員使用方括號(hào)引用數(shù)組元素。而在Objective-C中,方括號(hào)還有其他意義:它們用于向某個(gè)對(duì)象發(fā)送消息,通知其執(zhí)行某種操作。在在方括號(hào)內(nèi),第一項(xiàng)是對(duì)象,其余部分是你需要發(fā)送的消息。例句如下:

  1. [Point new] 

Objective-C具有一個(gè)極好的特性,你可以把類(lèi)當(dāng)成對(duì)象來(lái)向類(lèi)發(fā)送消息。在本例中,我們就是向Point類(lèi)發(fā)送new消息,通知Point類(lèi)創(chuàng)建一個(gè)新對(duì)象。以下是完整的實(shí)例化對(duì)象代碼。

  1. int main (int argc, const char* argv[]){  id thisPoint;  
  2.    thisPoint = [Point new];   
  3.     [thisPoint SetX: 0];   
  4.      [thisPoint SetY: 0];     
  5.      [thisPoint Show];  
  6.  }    
  7. // main 

下面進(jìn)行逐句分析。

這個(gè)main()函數(shù)和普通C程序中的main()函數(shù)沒(méi)有什么區(qū)別,參數(shù)argc保存啟動(dòng)參數(shù)的數(shù)量,因?yàn)槌绦蛎S米鲉?dòng)參數(shù)傳遞,所以argc通常為1或更大。參數(shù)argv數(shù)組用于保存啟動(dòng)參數(shù),argv[0]通常就是程序名,如果有其他啟動(dòng)參數(shù),依次存放在argv[1]、argv[2]等等。

id代表identifier,是一種泛型,用于表示任何種類(lèi)的對(duì)象。實(shí)際上,id就是指向某個(gè)對(duì)象的指針。

通過(guò)給Point類(lèi)發(fā)送new消息,創(chuàng)建了一個(gè)Point類(lèi)的實(shí)例,thisPoint中保存的就是指向這個(gè)市里的指針。

接下來(lái)就是通過(guò)給thisPoint對(duì)象發(fā)送SetX和SetY消息來(lái)設(shè)定其元素X和Y。需要注意到,和方法聲明中類(lèi)似,[]操作符發(fā)送給對(duì)象的消息需要攜帶參數(shù)時(shí),在消息之后需要使用冒號(hào),而攜帶的參數(shù)就跟隨在冒號(hào)的后面。

最后就是通過(guò)給thisPoint對(duì)象發(fā)送Show消息顯示其相關(guān)信息。同樣需要注意,當(dāng)發(fā)送的消息沒(méi)有參數(shù)時(shí),后面千萬(wàn)不可使用冒號(hào)。

繼承

編寫(xiě)面向?qū)ο蟮某绦驎r(shí),你所創(chuàng)建的類(lèi)和對(duì)象之間存在一定的關(guān)系。它們協(xié)同工作才能實(shí)現(xiàn)程序相應(yīng)的功能。處理類(lèi)和對(duì)象間的關(guān)系時(shí),OOP有個(gè)很重要的特性叫做繼承,使用繼承可以定義一個(gè)具有原有類(lèi)所有功能的新類(lèi)。

在前文的@interface部分聲明新類(lèi)的時(shí)候,其實(shí)已經(jīng)用到了繼承的語(yǔ)法。

  1. @interface Point : NSObject  

如上例中所示,冒號(hào)后的標(biāo)識(shí)符就是需要繼承的類(lèi)。在Objective-C中,可以從非類(lèi)中繼承對(duì)象,但如果使用Cocoa,會(huì)希望從NSObject繼承對(duì)象,因?yàn)镹SObject提供了大量有用的特性。@interface部分最簡(jiǎn)單的繼承代碼可以如下所示:

  1. @interface MyPoint : Point@end  // MyPoint 

這時(shí),MyPoint類(lèi)就繼承了Point類(lèi)的所有數(shù)據(jù)成員和方法。在下面的文字中,我們統(tǒng)一用超類(lèi)來(lái)描述所繼承的類(lèi),用子類(lèi)來(lái)描述實(shí)施繼承的類(lèi)。這里Point就是MyPoint的超類(lèi),而MyPoint就是Point的子類(lèi)。

我們?cè)趯?xiě)新的子類(lèi)時(shí),有時(shí)為了在類(lèi)中引入某個(gè)獨(dú)特的特性,需要添加新方法。還有些時(shí)候,可能需要替換或增強(qiáng)由這個(gè)新類(lèi)的某個(gè)超類(lèi)所定義的現(xiàn)有方法。

Objective-C提供某種方法來(lái)重新方法,并且仍然調(diào)用超類(lèi)的實(shí)現(xiàn)方式。為了調(diào)用繼承方法的實(shí)現(xiàn),需要使用super作為方法調(diào)用的目標(biāo)。

繼續(xù)沿用前面給出的例子,假設(shè)我們發(fā)現(xiàn)之前采用的坐標(biāo)有偏差,實(shí)際上的X坐標(biāo)應(yīng)為原有的X-10。我們便可在子類(lèi)MyPoint中對(duì)Point類(lèi)的Show()方法進(jìn)行如下重寫(xiě)。

  1. @implementation MyPoint   
  2. - (void) Show{  XX = X - 10;  [super Show];  
  3. }    
  4. // Show @end  // MyPoint 

從上面的代碼中,我們通過(guò)向super發(fā)送Show消息使用了超類(lèi)的相應(yīng)代碼。

這里的super既不是參數(shù)也不是實(shí)例變量,向super發(fā)送消息時(shí),實(shí)際上是在請(qǐng)求Objective-C向該類(lèi)的超類(lèi)發(fā)送消息。如果超類(lèi)中沒(méi)有定義該消息,Objective-C將按照慣常的方式在繼承鏈中繼續(xù)查找對(duì)應(yīng)的消息。

小結(jié):詳解Objective-C學(xué)習(xí)筆記之面向?qū)ο?/strong>編程的內(nèi)容介紹完了,希望本文對(duì)你有所幫助。

責(zé)任編輯:zhaolei 來(lái)源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2011-06-17 17:27:29

Objective-CCocoa蘋(píng)果

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用鍵

2011-08-11 16:01:03

Objective-C面向?qū)ο?/a>內(nèi)存

2011-07-27 16:36:03

iphone Objective- 靜態(tài)庫(kù)

2011-08-04 14:58:37

Objective-C Cocoa NSString

2011-08-04 10:38:17

Objective-C 預(yù)處理程序

2011-08-17 11:05:22

Objective-C方法

2011-08-05 14:03:39

Objective-C 對(duì)象 模板

2011-08-15 16:09:44

Cocoa對(duì)象Objective-C

2011-07-29 16:16:30

Objective-c block

2011-08-17 10:58:59

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

2011-07-14 17:37:02

C++面向?qū)ο缶幊趟枷?/a>

2011-07-14 17:24:10

C++面向?qū)ο笏枷?/a>

2011-05-11 14:06:49

Objective-C

2013-08-21 14:57:42

objective-c問(wèn)題

2011-07-22 15:42:39

Objective-C UIView 內(nèi)存

2015-10-08 10:01:10

Objective-CLayout

2011-07-18 16:36:51

Objective-C XCode

2014-04-01 10:50:42

iOS開(kāi)發(fā)runtimeObjective-C

2011-07-19 17:24:31

Objective-C 對(duì)象
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产精品久久久久国产a级 欧美日本韩国一区二区 | 欧美黄在线观看 | 欧美成人精品激情在线观看 | 99精品欧美一区二区三区综合在线 | 久久久久久亚洲 | 久久精品黄色 | 国产激情免费视频 | 亚洲国产一区在线 | 国产男女视频网站 | 91色站| 天天干视频 | 亚洲h视频 | 五月免费视频 | 久久精品国产免费一区二区三区 | 国产情侣在线看 | 亚洲一区二区三区免费在线观看 | 涩爱av一区二区三区 | 久久久久综合 | 日韩免费高清视频 | 日本黄色激情视频 | 国产日韩欧美中文字幕 | 一区二区精品在线 | 97精品超碰一区二区三区 | 日韩av在线一区 | 日韩免费一区二区 | www.久久国产精品 | 国产精品18毛片一区二区 | 亚洲看片网站 | 日本视频在线 | 婷婷在线视频 | 国产福利91精品一区二区三区 | 亚洲一区二区在线 | 欧美亚洲一区二区三区 | 狠狠操狠狠色 | 亚洲欧美在线免费观看 | 婷婷综合| 国产精品国产成人国产三级 | 欧美在线一区二区三区 | 国产一级黄色网 | 综合色播| 欧美不卡 |