国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Objective-C最基礎(chǔ)語法之Class定義

移動(dòng)開發(fā) iOS
在Objective-C里面一個(gè)類的構(gòu)成一般由兩部分組成,一個(gè)是成員和方法聲明的頭文件(.h),一個(gè)是類方法實(shí)現(xiàn)的文件(.m)文件。

Objective-C最基礎(chǔ)語法之Class定義是本文要介紹的內(nèi)容,Objective-C是面向?qū)ο蟮恼Z言,因此的定義是基礎(chǔ)中的基礎(chǔ)。Objective-C是C的超級(jí),但是在語法上跟C又有一些不同,尤其是在對(duì)屬性和方法的訪問上,有其非常特殊的語法。看過Objective-C的代碼都知道,里面會(huì)有很多的中括號(hào),這是Objective-C獨(dú)有的。

Objective-C里面一個(gè)的構(gòu)成一般由兩部分組成,一個(gè)是成員和方法聲明的頭文件(.h),一個(gè)是方法實(shí)現(xiàn)的文件(.m)文件。當(dāng)然你也可以把的聲明寫在.m文件里面,但是這樣就是私有的成員,其他就不能使用了。成員的聲明是通過interface來實(shí)現(xiàn)的,懂C#的朋友應(yīng)該知道C#里面也有interface,但是Objective-C里面的interfacegen跟C#里面是完全是兩回事,Objective-C里面的interface就是用來定義一個(gè)里面有那些屬性和方法的。

一個(gè)類的方法有兩種,一種是類方法,一種是實(shí)例方法。類方法有點(diǎn)像靜態(tài)方法,它屬于一個(gè)類,而不是屬于一個(gè)類的實(shí)例。而實(shí)例方法就是屬于一個(gè)類的實(shí)例的方法。類方法在定義的時(shí)候前面用“+”號(hào)標(biāo)識(shí),實(shí)例方法前面則用“-”號(hào)標(biāo)識(shí)。比如:

  1. + (id)allObjective-C;//這是一個(gè)類方法  
  2.  (void)doSomething;//這是一個(gè)實(shí)例方法  

在調(diào)用的時(shí)候使用中括號(hào)的語法,比如:

  1. MyClass *class = [MyClass allObjective-C];//調(diào)用類方法,分配內(nèi)存  
  2. [class doSomething];//調(diào)用實(shí)例方法,實(shí)現(xiàn)某些功能  

首先看一個(gè)完整的類的定義和實(shí)現(xiàn)的例子。
 
.h文件的代碼為:

  1.  @interface Person:NSObject{  
  2. NSUInteger age;  
  3. NSString *name;  
  4. }  
  5. @property (nonatomic, assign)NSUInteger age;  
  6. @property (nonatomic,retain)NSString *name;  
  7.  
  8. + (Person *)person;  
  9. - (id)init;  
  10. - (void)setAge:(NSUInteger)theAge;  
  11. - (NSUInteger)age;  
  12.  
  13. - (void)vote;  
  14. @end  

.m文件的代碼:

  1.  #import "Person.h"  
  2. @interface Person ()  
  3. - (BOOL)canVote;  
  4. @end  
  5. @implementation Person  
  6. @synthesize name;  
  7. - (void)setAge:(NSUInteger)theAge{  
  8. age = theAge;  
  9. }  
  10. - (NSUInteger)age{  
  11. return age;  
  12. }  
  13. - (id)init{  
  14. if (self = [super init]){  
  15. age = 0;  
  16. name = @"";  
  17. }  
  18. return self;  
  19. }  
  20. - (BOOL)canVote{  
  21. return age >= 18;  
  22. }  
  23. - (void)vote{  
  24. //do something  
  25. }  
  26. @end  

上面是一個(gè)比較完整的定義類的例子,首先在頭文件里面定義了兩個(gè)字段,叫age和name;還有兩個(gè)屬性,也叫age和name,還有一個(gè)初始化的方法和一個(gè)實(shí)例方法。很多朋友剛接觸Objective-C的時(shí)候可能不理解,怎么字段和屬性的名字是一樣的?有什么不同么?是的,在Objective-C里面字段和屬性的名字是可以一樣的,但二者是不同的東西。一般來說一個(gè)類的頭文件聲明的結(jié)構(gòu)是這樣的:

  1.  @interface 類名{  
  2. 字段聲明  
  3. }  
  4. 屬性聲明  
  5. 方法聲明  
  6. @end  

字段是私有的,在類外部不能使用。必須使用屬性,外部才能使用。什么是屬性?其實(shí)屬性就是對(duì)一個(gè)字段的get和set方法。在C#里面我們可以很方便地使用get和set訪問器,但是在Objective-C里面要分別定義。比如上面的例子就是定義了一個(gè)setAge的set方法和一個(gè)叫age的get方法 。
 
 而如果我們并不需要在屬性的get或者set方法中做任何的操作,還要自己寫這么多代碼實(shí)在是有些麻煩。Objective-C里有一種快速定義屬性的方法,就是使用 synthesize。synthesize后面跟著屬性名,編譯器就會(huì)自動(dòng)幫你添加一個(gè)屬性,而不用自己去寫get和set方法了。那如果你要定義的屬性是只讀的或者有其他特性,該怎么辦呢?看頭文件里面定義屬性的時(shí)候,只要做一些說明就好了。
 
 比如上面例子中的name屬性,在前面就有(nonatomic,retain)相關(guān)的說明。這些說明是跟內(nèi)存管理和訪問權(quán)限有關(guān)的,比如添加了retain說明,就類似于name = [value retail],也就是說在給這個(gè)屬性賦值的時(shí)候就會(huì)把retain count增加一。還有其他的說明比如readonly等,不一一列舉。一般來說,給基本類型比如NSInteger的屬性添加的說明有nonatomic, assign,而給引用類型的屬性添加唉的有nonatomic,retain。

除了定義字段和屬性外,我們還需要定義方法。定義方法比較簡單,只要區(qū)分好類方法和實(shí)例方法就好了。還有一點(diǎn)需要注意的是,在Objective-C中一個(gè)方法的名稱是包含冒號(hào)的,比如age屬性的set方法的完整的名稱是setAge:,而不是setAge。Objective-C里方法的定義比較詭異,它允許將一個(gè)方法的名稱和參數(shù)的名稱混合在一起。比如在C#中我定義一個(gè)方法:     

  1. void SetPosition(int x,int y)  
  2. {}   
  3.    在Objective-C中就會(huì)變成這樣:  
  4.  - (void)setPositionX:(NSInteger) x Y:(NSInteger)y{  
  5. }  

這個(gè)時(shí)候完整的方法名是“setPositionX:Y:”,方法名和參數(shù)名是混合在一起的,各參數(shù)之間用空格分開,參數(shù)名后面緊跟著冒號(hào),并用小括號(hào)擴(kuò)起參數(shù)的類型(別忘了引用類型要添加*以表示指針),最后跟著形參的名字。

還有一點(diǎn)要注意的是,形參的名字不要和屬性或字段的名字重復(fù)了,否則會(huì)有編譯警告,說局部變量覆蓋了全局的變量。剛接觸Objective-C的時(shí)候?qū)@個(gè)可能會(huì)比較不習(xí)慣,不過到后來感覺還蠻舒服的。
  
.m文件里面的代碼是方法的具體實(shí)現(xiàn),這是對(duì)外不可見的。一個(gè)典型的m文件的內(nèi)容為:
  
#import "頭文件.h"//系統(tǒng)自帶的請(qǐng)用<>而不是雙引號(hào),不解釋

  1. @implementation 類名{  
  2. //方法的具體實(shí)現(xiàn)  
  3. }  

方法的實(shí)現(xiàn)就不需要過多的解釋了。在上面的例子當(dāng)中還額外多了一些東西

  1. @interface Person ()   
  2.      - (BOOL)canVote;   
  3. @end  

這又是干什么的了?在Objective-C中這叫“擴(kuò)展”。所謂的擴(kuò)展,其實(shí)就是對(duì)一個(gè)類的方法或?qū)傩赃M(jìn)行擴(kuò)展。原來的類中沒有的方法或?qū)傩裕覀兛梢院芊奖愕眠M(jìn)行擴(kuò)展。但是一定要注意,在擴(kuò)展中只能擴(kuò)展屬性和方法,如果你想添加字段,那就會(huì)編譯錯(cuò)誤。一個(gè)典型的擴(kuò)展的寫法跟interface比較類戲,形如:

  1. @interfae 類名(可以添加一些說明性的文字,也可以留空)  
  2. //定義屬性和方法,但是不能添加字段,因此那一對(duì)大括號(hào)不能有  
  3. @end  

擴(kuò)展可以是公開的,也可以是私有的,就看你在哪里定義。這里我定義在m文件里面,自然就是私有的了,如果定義在頭文件里面,那么就是公有的。

interface可以分開多出定義,同樣的implementation一個(gè)類也可以寫多次,寫多次的好處就是調(diào)理比較清晰,提高代碼的可讀性。比如可以把功能相關(guān)的一些代碼寫在一個(gè)

  1. @ implementation@end中 

然后另外一些代碼寫在別的地方。

Objective-C中定義一個(gè)類的最基礎(chǔ)的語法大概就是這么多。

小結(jié):Objective-C最基礎(chǔ)語法之Class定義的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對(duì)你有所幫助!

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

2011-07-06 11:19:45

Objective-C

2011-08-17 11:15:22

Objective-C語法

2010-11-04 16:32:00

Objective-C

2011-08-02 13:16:36

Objective-C 語法 函數(shù)

2011-05-11 13:54:08

Objective-C

2014-04-30 10:16:04

Objective-CiOS語法

2015-10-08 10:01:10

Objective-CLayout

2011-07-18 16:36:51

Objective-C XCode

2011-08-04 14:58:37

Objective-C Cocoa NSString

2011-05-11 15:45:50

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

2011-07-06 14:12:14

Objective-C

2011-04-08 10:51:17

Objective-CiOS

2011-08-18 15:19:28

XcodeObjective-C語法

2013-07-24 19:19:03

Objective-CiOS開發(fā)動(dòng)態(tài)特性之protoc

2013-05-02 10:51:17

iOS開發(fā)Objective-C@property

2015-11-02 10:13:41

iOSObjective-C語法

2011-08-01 17:11:43

Objective-C 函數(shù)

2011-08-03 16:22:05

Objective-C CodeBlocks

2011-08-10 18:07:29

Objective-C反射

2013-06-20 10:40:32

Objective-C實(shí)現(xiàn)截圖
點(diǎn)贊
收藏

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

在线观看日韩电影| 欧美人与牛zoz0性行为| 精品国产第一区二区三区观看体验| 国产精品 日产精品 欧美精品| 日韩激情在线观看| 激情文学一区| 自拍视频国产精品| 精品亚洲欧美日韩| 亚洲黄色a v| 国产一区二区三区在线观看免费 | 精品久久久一区| 日韩精品福利视频| 91精品啪在线观看国产手机| 一本大道久久a久久精二百| 欧美成人高清电影在线| 日韩人妻精品无码一区二区三区| 日本在线一二三| 国产麻豆视频精品| 91精品婷婷国产综合久久性色| xxav视频| 成人午夜视频福利| 宅男在线精品国产免费观看| 亚洲mv大片欧洲mv大片| 国产91综合网| 久久91精品久久久久久秒播| 乱色588欧美| 欧洲三级视频| 91成人免费观看网站| 高清亚洲高清| 亚洲开发第一视频在线播放| 成人一区二区三区在线观看| 香蕉视频在线网址| 精品一区视频| 欧美人与性禽动交精品| 二区三区在线观看| 美女在线视频一区| 女人香蕉久久**毛片精品| 久久综合免费视频| 欧美成人xxxxx| 日韩中文字幕国产| 亚洲欧洲av| 久久波多野结衣| 人妖一区二区三区| 日韩欧美中文字幕精品| 黄动漫视频高清在线| 日韩毛片在线看| 日韩av卡一卡二| 亚洲色图19p| 少妇高潮流白浆| 中文字幕一区二区三区在线视频| 欧美激情电影| 欧洲亚洲妇女av| 国产不卡在线| 欧美日韩在线视频一区二区| av电影免费| 亚洲图片欧美激情| 午夜激情福利在线| 中文字幕中文字幕中文字幕亚洲无线 | 久久久久久久久国产精品| 秋霞在线一区二区| 国产精品欧美大片| 一区二区三区四区在线观看视频| av成人 com a| 精品福利在线导航| 成人免费福利| 在线观看日韩欧美| www国产精品| 日本成人黄色片| 欧美jjzz| 在线综合视频网站| 亚洲精品乱码久久久久久久久| 夜鲁很鲁在线视频| 7777精品久久久大香线蕉| 婷婷久久免费视频| 日本一区二区久久精品| 波多野结衣91| 亚洲免费伊人电影在线观看av| 国产95亚洲| 亚洲影视中文字幕| 在线播放麻豆| 九色综合国产一区二区三区| 午夜网站在线观看| 麻豆映画在线观看| 成人国产精品免费网站| 久久男人资源站| 黄色另类av| 精品少妇人欧美激情在线观看| 日韩视频在线直播| caoporen国产精品| 日韩成人亚洲| 成人自拍偷拍| 99re66热这里只有精品3直播| 大陆极品少妇内射aaaaa| 成人久久综合| 美女久久一区| 999热视频在线观看| 国产日产高清欧美一区二区三区| 欧洲黄色一级视频| 日韩欧美国产一区二区| 婷婷激情图片久久| 996这里只有精品| 精品久久久三级丝袜| 8848成人影院| 熟女熟妇伦久久影院毛片一区二区| silk一区二区三区精品视频| 免费特级黄色片| 国产中文日韩欧美| 综合欧美亚洲日本| 欧美aaaaaaaa| 4444在线观看| 欧美二区在线观看| 97在线免费| av电影在线观看完整版一区二区| 亚洲欧洲日本专区| 中日韩男男gay无套| 国产黄页在线观看| 精品视频一区在线视频| 亚洲欧洲一区| r级无码视频在线观看| 久久嫩草精品久久久久| 国产精品一二三四五| 亚洲激情文学| 国产z一区二区三区| 黄色av免费| 国产亚洲欧洲高清一区| 可以看av的网站久久看| 日本在线视频网| 精品久久久久久久久久中文字幕| 久久亚洲精品欧美| 中文字幕在线精品| 亚洲综合色丁香婷婷六月图片| 国产精品色婷婷在线观看| 九色在线91| 丰满少妇在线观看| 六月丁香婷婷激情| www.日本三级| 精品免费国产| 免费毛片一区二区三区久久久| 欧美日韩国产色视频| 亚洲国产精品成人综合| 国产精品女同互慰在线看| 国产成人77亚洲精品www| 精品婷婷色一区二区三区蜜桃| 欧美日韩黄色影视| 成人午夜激情影院| 久久9999免费视频| 男女视频网站免费观看| 国产精品夜色7777狼人| 欧美无砖砖区免费| 亚洲韩国在线| 精品福利av导航| 久久综合av免费| 奇米一区二区三区| 成人影院在线| 欧美一级片网址| 亚洲熟妇国产熟妇肥婆| 这里只有精品在线播放| 91麻豆免费观看| 日韩精品99| 猫咪av永久| 香港三级日本三级a视频| 国产小黄视频| 日韩高清在线| 日韩av片永久免费网站| 亚洲人成伊人成综合网久久久| 日韩一级大片在线观看| 中文av字幕一区| 国产精品亚洲人在线观看| 大白屁股一区二区视频| 久久嫩草精品久久久精品| 综合久久久久综合| 欧美性xxxxx极品| 精品国产一区二区亚洲人成毛片| 欧洲一区在线观看| 亚洲一区二区精品| 日韩视频免费大全中文字幕| 久久天天躁夜夜躁狠狠躁2022| 日韩小视频在线| 久久综合亚洲社区| 日韩免费在线观看视频| 国产日韩一区在线| 国产伦精品一区二区三| 777久久久精品| 国产精品国产三级国产aⅴ9色| 色综合五月天导航| 亚洲自拍偷拍一区| 欧美美乳视频网站在线观看| 992tv成人免费观看| 人人干视频在线| 国产成免费视频| 午夜在线视频| 欧美电影网址| 精品不卡一区| 国产精品69久久久久水密桃| 亚洲国产精品高清| 日本高清不卡在线观看| 在线观看精品自拍私拍| 日韩美女毛茸茸| 一卡二卡三卡视频| 桃花色综合影院|