激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - IOS - Objective-C中類和方法的定義以及協(xié)議的使用

Objective-C中類和方法的定義以及協(xié)議的使用

2021-01-06 14:44芳草小腳丫 IOS

這篇文章主要介紹了Objective-C中類和方法的定義以及協(xié)議的使用,配合Mac下的Xcode IDE進(jìn)行講解,需要的朋友可以參考下

類和方法的定義
一般類都是繼承nsobject,新建一個(gè)類時(shí)父類選擇nsobject即可,oc只有單繼承,沒(méi)有多繼承。

下面以一個(gè)簡(jiǎn)單的oc工程來(lái)講解(需配置好xcode工具以相應(yīng)的sdk),會(huì)建工程的請(qǐng)直接跳到‘六'步驟。

一、新建一個(gè)oc編譯環(huán)境,打開(kāi)xcode->file->new->project(快捷鍵 command+shift+n)。

二、選擇os x--application--command line tool,選擇next

Objective-C中類和方法的定義以及協(xié)議的使用

三、填寫項(xiàng)目名稱(最好英文),你自己的名字,和公司的標(biāo)志。type選擇foundation,下面的勾表示是否選擇arc,建議初學(xué)者勾上。點(diǎn)擊next

Objective-C中類和方法的定義以及協(xié)議的使用

四、此時(shí)工程建好了,會(huì)看到一個(gè)main.m文件,所有的調(diào)用都在main.m中完成。

新建一個(gè)類,command+n,選擇父類nsobject,取名people

Objective-C中類和方法的定義以及協(xié)議的使用

五、點(diǎn)擊next之后,出現(xiàn)以下界面,切記下面的√要打上。否則在編譯時(shí)工程搜索不到此文件,會(huì)出現(xiàn)編譯錯(cuò)誤。

Objective-C中類和方法的定義以及協(xié)議的使用

六、在people.h文件interface中添加變量,nsstring為oc的字符串變量。

復(fù)制代碼 代碼如下:

@interface person : nsobject {
    
    nsstring * _name;
    int _age;
    
}


然后在{}外面定義變量的初始化方法和set方法,格式:-(類型)方法名:(參數(shù)類型)參數(shù)1 參數(shù)名:(參數(shù)類型)參數(shù)2……,set方法名一般為set變量名,變量名首字母大寫,此未蘋果官方文檔上的說(shuō)明

復(fù)制代碼 代碼如下:

-(void)setage:(int)age;
 
-(void)setname:(nsstring *)name;


定義變量的get方法,get方法名同樣為get變量名

復(fù)制代碼 代碼如下:

-(int)age;
 
-(nsstring *)name;


七、在people.m文件中實(shí)現(xiàn)people.h文件中聲明的方法。

復(fù)制代碼 代碼如下:


-(void)setage:(int)age {
 
    _age = age;
 
}
 
-(void)setname:(nsstring *)name {
    _name = [name copy];//copy方法涉及到oc的內(nèi)存管理機(jī)制。使用copy可防止內(nèi)存泄露
}

 

-(int)age {
    return _age;
}
-(nsstring *)name {
    return _name;
}


七、在main.m中定義一個(gè)people類,并對(duì)其屬性變量進(jìn)行初始化。
定義一個(gè)people類:

復(fù)制代碼 代碼如下:

person *dwight = [[person alloc] init];


給其屬性賦值:

復(fù)制代碼 代碼如下:

[dwight setname:@"dwight schrute"];
 
[dwight setage:38];


打印值:

 

nslog(@"%@ (%d)", [dwight name], [dwight age]);
ps:一般nsstring,nsarray,nsdictionary,nsdata等類型的值打印用%@,int等c中的類型,按照c語(yǔ)言打印的關(guān)鍵字打印,nsinteger,nsnumber打印時(shí)用%d。

打印結(jié)果:

Objective-C中類和方法的定義以及協(xié)議的使用

 


protocol協(xié)議,設(shè)置代理
協(xié)議(protocol)是objc中很重要的一部分,它用來(lái)定義可由任何其他類完成的方法,當(dāng)本類中需要完成某些功能時(shí),可由protocol來(lái)實(shí)現(xiàn)
protocol在三種情況中需要用到:

需要聲明別的類期望完成的方法時(shí)
在隱藏自身類的情況下聲明該類對(duì)象的接口時(shí)
在某些沒(méi)有繼承關(guān)系的類之間獲取其之間的相似性,即兩個(gè)類之間沒(méi)有繼承關(guān)系,但是都需要實(shí)現(xiàn)同樣的方法時(shí),就可通過(guò)代理來(lái)實(shí)現(xiàn)。
protocol文件中只是定義一些方法,當(dāng)你在類中實(shí)現(xiàn)了這個(gè)protocol時(shí),你就需要補(bǔ)充這些方法,系統(tǒng)會(huì)自動(dòng)調(diào)用這些方法
protocol中方法分為@required和@optional,其中在@required下的方法必須實(shí)現(xiàn),@optional中方法是選擇性實(shí)現(xiàn),也可不實(shí)現(xiàn)。

下面以一個(gè)簡(jiǎn)單實(shí)例說(shuō)明protocol的用法(os x下)在ios下同樣使用

一、新建一個(gè)objective-c class,命名為ioscoder

①、在ioscoder@end后面定義一個(gè)protocol,命名為myprotocoldelegate,并聲明@required和@optional方法

②、在#import后聲明@protocol myprotocoldelegate

③、在interface中聲明屬性@property(nonatomic,assign) id<myprotocoldelegate>   delegate;


整個(gè).h文件如下

復(fù)制代碼 代碼如下:

#import <cocoa/cocoa.h>
 
@protocol myprotocoldelegate;
 
@interface ioscoder : nsobject
//聲明delegate屬性
@property(nonatomic,assign) id<myprotocoldelegate>   delegate;
 
@end

 

復(fù)制代碼 代碼如下:

//定義protocol
@protocol myprotocoldelegate <nsobject>
//必須實(shí)現(xiàn)方法
@required
-(void)startobjectivec;
-(void)startprograming;
//選擇實(shí)現(xiàn)方法
@optional
-(void)startjavascript;
-(void)startpython;
 
@end


二、在需要用到ioscoder類的文件中,聲明并進(jìn)行初始化
如果要用到ioscoder中的delegate,則必須在.h文件中進(jìn)行聲明,聲明格式

 

@interface 類名:繼承類<myprotocoldelegate>

定義ioscoder對(duì)象

復(fù)制代碼 代碼如下:

ioscoder *ios = [[ioscoder alloc] init];
    ios.delegate = self;
    if ([ios respondstoselector:@selector(startobjectivec)]) {
        [self startobjectivec];
    }
    if ([ios respondstoselector:@selector(startprograming)]) {
        [self startprograming];
    }


實(shí)現(xiàn)required方法

復(fù)制代碼 代碼如下:

-(void) startobjectivec
{
    nslog(@"@required,startobjectivec");
}
-(void)startprograming
{
    nslog(@"@required,startprograming");
    
}


附:在ios viewcontroller中使用時(shí)

 

假設(shè)a要跳轉(zhuǎn)到b頁(yè)面時(shí)需要在b頁(yè)面中實(shí)現(xiàn)a中的protocol方法

.h文件

復(fù)制代碼 代碼如下:

#import <uikit/uikit.h>
@class aviewcontroller;
@protocol adelegate <nsobject>
 
- (void) amethod
 
@end

 

復(fù)制代碼 代碼如下:

@interface aviewcontroller : uiviewcontroller
{
     id<adelegate> _delegate;
    
}
@property(nonatomic,assign)id<adelegate> delegate;
@end


在頁(yè)面跳轉(zhuǎn)之前加上

復(fù)制代碼 代碼如下:

if (_delegate && [_delegate respondstoselector:@selector(amethod)]) {
          [_delegate amethod];
     }


在b頁(yè)面中聲明代理<adelegate>,實(shí)現(xiàn)amethod方法,實(shí)例化a對(duì)象,并設(shè)置代理
則在b界面會(huì)調(diào)用amethod方法,即完成了protocol的實(shí)現(xiàn)

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 精品国产精品久久 | 免费观看一级黄色片 | 免费观看一级黄色片 | 一级黄色片在线看 | 久久福利国产 | 午夜视频在线免费 | 欧美一区二区黄色片 | 中文字幕四区 | 欧美成人一区免费视频 | 毛片在线免费播放 | 久久777国产线看观看精品 | 欧美日韩中文字幕在线视频 | 日韩视频不卡 | 操皮视频| 亚洲精品成人久久久 | 精品在线视频观看 | 日本韩国欧美一级片 | 91网站链接 | 久久精品亚洲精品国产欧美kt∨ | 国产一区二区视频网站 | 美女羞羞视频网站 | 色悠悠久久久久 | 91成人影库 | 蜜桃网在线| 毛片电影网址 | 91av在线免费观看 | 黄色美女网站免费看 | 欧美国产一区二区三区激情无套 | 一级在线视频 | 日韩一级免费毛片 | hd日本xxxx| 99影视在线视频免费观看 | 午夜男人免费视频 | 久久精品久久精品国产大片 | 日韩电影一区二区 | 国产精品久久久免费 | 精品国产一区二区三区在线观看 | 第四色成人网 | 污黄视频在线观看 | 精品一区二区三区免费看 | 黑人日比 |