最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2016年01月28日 09:25:30   作者:芳草小腳丫  
這篇文章主要介紹了Objective-C中類和方法的定義以及協(xié)議的使用,配合Mac下的Xcode IDE進(jìn)行講解,需要的朋友可以參考下

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

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

一、新建一個(gè)oc編譯環(huán)境,打開xcode->File->New->Project(快捷鍵 command+shift+N)。

二、選擇OS X--Application--Command Line Tool,選擇next

201612892433475.png (718×258)

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

201612892459908.png (539×273)

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

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

201612892516548.png (536×135)

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

201612892534955.png (366×104)

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

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

@interface Person : NSObject {
    
    NSString * _name;
    int _age;
    
}

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

201612892550587.png (409×62)


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

需要聲明別的類期望完成的方法時(shí)
在隱藏自身類的情況下聲明該類對(duì)象的接口時(shí)
在某些沒有繼承關(guān)系的類之間獲取其之間的相似性,即兩個(gè)類之間沒有繼承關(guān)系,但是都需要實(shí)現(xiàn)同樣的方法時(shí),就可通過代理來實(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í)例說明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)

相關(guān)文章

  • iOS11.3以下modal中input光標(biāo)錯(cuò)位的解決方法

    iOS11.3以下modal中input光標(biāo)錯(cuò)位的解決方法

    這篇文章主要介紹了iOS11.3以下modal中input光標(biāo)錯(cuò)位的解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • iOS仿微信搖一搖功能

    iOS仿微信搖一搖功能

    這篇文章主要為大家詳細(xì)介紹了iOS仿微信搖一搖功能的實(shí)現(xiàn)方法 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • iOS中的NSTimer定時(shí)器的初步使用解析

    iOS中的NSTimer定時(shí)器的初步使用解析

    這篇文章主要介紹了iOS中的NSTimer定時(shí)器的初步使用解析,通過例子簡(jiǎn)單講解了NSTimer的輸出與停止的方法,需要的朋友可以參考下
    2016-05-05
  • iOS 統(tǒng)計(jì)Xcode項(xiàng)目代碼行數(shù)的實(shí)例

    iOS 統(tǒng)計(jì)Xcode項(xiàng)目代碼行數(shù)的實(shí)例

    下面小編就為大家分享一篇iOS 統(tǒng)計(jì)Xcode項(xiàng)目代碼行數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • iOS開發(fā)中如何實(shí)現(xiàn)一個(gè)平滑的顏色過渡

    iOS開發(fā)中如何實(shí)現(xiàn)一個(gè)平滑的顏色過渡

    這篇文章給大家分享在ios開發(fā)中如何從a顏色平滑的過渡到b顏色。代碼簡(jiǎn)單易懂,需要的朋友參考下吧
    2017-05-05
  • 深入淺析IOS中UIControl

    深入淺析IOS中UIControl

    UIControl,相信大家對(duì)其并不陌生吧,比如平常最常用的UIButton就是繼承自UIControl的。下面通過本篇文章給大家介紹ios中UIControl,感興趣的朋友一起學(xué)習(xí)吧
    2015-10-10
  • 詳解iOS多線程GCD問題

    詳解iOS多線程GCD問題

    本篇文章主要介紹了iOS多線程GCD問題,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • IOS實(shí)現(xiàn)郵箱模糊匹配的功能

    IOS實(shí)現(xiàn)郵箱模糊匹配的功能

    在一些App的訂單填寫頁(yè),輸入用戶郵箱有個(gè)提示郵箱后綴的功能,很好用!還可以根據(jù)各個(gè)郵箱類型用戶量來做一個(gè)優(yōu)先級(jí)的匹配哦。這個(gè)功能該如何實(shí)現(xiàn)呢,下面來一起看看。
    2016-08-08
  • iOS 判斷頁(yè)面中的該填項(xiàng)是否填完整,改變按鈕狀態(tài)的方法

    iOS 判斷頁(yè)面中的該填項(xiàng)是否填完整,改變按鈕狀態(tài)的方法

    下面小編就為大家分享一篇iOS 判斷頁(yè)面中的該填項(xiàng)是否填完整,改變按鈕狀態(tài)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • iOS開發(fā)frame和bounds使用示例詳解

    iOS開發(fā)frame和bounds使用示例詳解

    這篇文章主要為大家介紹了iOS開發(fā)frame和bounds使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09

最新評(píng)論

大同市| 静宁县| 永德县| 漯河市| 玉门市| 大渡口区| 开化县| 诏安县| 西充县| 金塔县| 若尔盖县| 河东区| 阜康市| 民勤县| 图木舒克市| 建昌县| 安徽省| 敖汉旗| 盐山县| 定西市| 中江县| 高唐县| 东辽县| 阿克苏市| 福泉市| 全州县| 宝应县| 木里| 富民县| 松溪县| 盐源县| 尤溪县| 彰化市| 呼玛县| 榆林市| 焦作市| 澎湖县| 凉城县| 钟山县| 鄂尔多斯市| 驻马店市|