亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

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

2020-07-26 03:28:54
字體:
來源:轉載
供稿:網友

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

下面以一個簡單的oc工程來講解(需配置好Xcode工具以相應的SDK),會建工程的請直接跳到‘六'步驟。

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

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

201612892433475.png (718×258)

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

201612892459908.png (539×273)

四、此時工程建好了,會看到一個main.m文件,所有的調用都在main.m中完成。

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

201612892516548.png (536×135)

五、點擊next之后,出現以下界面,切記下面的√要打上。否則在編譯時工程搜索不到此文件,會出現編譯錯誤。

201612892534955.png (366×104)

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

復制代碼 代碼如下:

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

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

-(void)setAge:(int)age;
 
-(void)setName:(NSString *)name;

定義變量的get方法,get方法名同樣為get變量名
復制代碼 代碼如下:

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

七、在people.m文件中實現people.h文件中聲明的方法。
復制代碼 代碼如下:

-(void)setAge:(int)age {
 
    _age = age;
 
}
 
-(void)setName:(NSString *)name {
    _name = [name copy];//copy方法涉及到oc的內存管理機制。使用copy可防止內存泄露
}

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


七、在main.m中定義一個people類,并對其屬性變量進行初始化。
定義一個people類:
復制代碼 代碼如下:

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

給其屬性賦值:
復制代碼 代碼如下:

[dwight setName:@"Dwight Schrute"];
 
[dwight setAge:38];

打印值:

NSLog(@"%@ (%d)", [dwight name], [dwight age]);
PS:一般NSString,NSArray,NSDictionary,NSData等類型的值打印用%@,int等C中的類型,按照C語言打印的關鍵字打印,NSInteger,NSNumber打印時用%d。

打印結果:

201612892550587.png (409×62)


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

需要聲明別的類期望完成的方法時
在隱藏自身類的情況下聲明該類對象的接口時
在某些沒有繼承關系的類之間獲取其之間的相似性,即兩個類之間沒有繼承關系,但是都需要實現同樣的方法時,就可通過代理來實現。
protocol文件中只是定義一些方法,當你在類中實現了這個protocol時,你就需要補充這些方法,系統會自動調用這些方法
protocol中方法分為@required和@optional,其中在@required下的方法必須實現,@optional中方法是選擇性實現,也可不實現。

下面以一個簡單實例說明protocol的用法(OS X下)在iOS下同樣使用

一、新建一個Objective-C class,命名為iOSCoder

①、在iOSCoder@end后面定義一個protocol,命名為MyprotocolDelegate,并聲明@required和@optional方法

②、在#import后聲明@protocol MyprotocolDelegate

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


整個.h文件如下

復制代碼 代碼如下:

#import <Cocoa/Cocoa.h>
 
@protocol MyprotocolDelegate;
 
@interface iOSCoder : NSObject
//聲明delegate屬性
@property(nonatomic,assign) id<MyprotocolDelegate>   delegate;
 
@end

復制代碼 代碼如下:

//定義protocol
@protocol MyprotocolDelegate <NSObject>
//必須實現方法
@required
-(void)StartObjectiveC;
-(void)StartPrograming;
//選擇實現方法
@optional
-(void)StartJavaScript;
-(void)StartPython;
 
@end

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

@interface 類名:繼承類<MyprotocolDelegate>

定義iOSCoder對象

復制代碼 代碼如下:

iOSCoder *ios = [[iOSCoder alloc] init];
    ios.delegate = self;
    if ([ios respondsToSelector:@selector(StartObjectiveC)]) {
        [self StartObjectiveC];
    }
    if ([ios respondsToSelector:@selector(StartPrograming)]) {
        [self StartPrograming];
    }

實現required方法
復制代碼 代碼如下:

-(void) StartObjectiveC
{
    NSLog(@"@required,StartObjectiveC");
}
-(void)StartPrograming
{
    NSLog(@"@required,StartPrograming");
    
}

附:在iOS ViewController中使用時

假設A要跳轉到B頁面時需要在B頁面中實現A中的protocol方法

.h文件

復制代碼 代碼如下:

#import <UIKit/UIKit.h>
@class AViewController;
@protocol ADelegate <NSObject>
 
- (void) AMethod
 
@end

復制代碼 代碼如下:

@interface AViewController : UIViewController
{
     id<ADelegate> _delegate;
    
}
@property(nonatomic,assign)id<ADelegate> delegate;
@end

在頁面跳轉之前加上
復制代碼 代碼如下:

if (_delegate && [_delegate respondsToSelector:@selector(AMethod)]) {
          [_delegate AMethod];
     }

在B頁面中聲明代理<ADelegate>,實現AMethod方法,實例化A對象,并設置代理
則在B界面會調用AMethod方法,即完成了protocol的實現

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
夜夜嗨av一区二区三区免费区| 国产成人在线视频| 日韩亚洲精品视频| 亚洲丁香婷深爱综合| 97色在线视频| 久久久成人av| 亚洲香蕉伊综合在人在线视看| 欧美日韩精品在线播放| 国产成人综合精品| 在线亚洲男人天堂| 欧美性高潮床叫视频| 性欧美亚洲xxxx乳在线观看| 欧美不卡视频一区发布| 亚洲www在线| 精品国产91久久久| 俺也去精品视频在线观看| 日韩精品在线看| 日本久久久久久久久久久| 日韩激情第一页| 久久人人爽国产| 黄色成人av网| 91久久国产综合久久91精品网站| 亚洲欧美国产高清va在线播| 欧美亚洲另类视频| 欧美电影在线免费观看网站| 亚洲国产精品久久久久久| 国产欧美精品一区二区| 国产精品视频26uuu| 亚洲专区在线视频| 久久综合色影院| 欧美激情精品久久久久久变态| 国产精品女人久久久久久| 欧美一区第一页| 91精品久久久久久综合乱菊| 国产成一区二区| 成人午夜激情网| 日韩电影免费观看在线观看| 亚洲人永久免费| 久久久之久亚州精品露出| 久久中文字幕一区| 日韩成人激情在线| 日韩av影片在线观看| 国产va免费精品高清在线观看| 久久夜色撩人精品| 国内精品小视频在线观看| 欧美丰满少妇xxxxx| 成人疯狂猛交xxx| 亚洲free性xxxx护士白浆| 亚洲国产精品视频在线观看| 国产精品欧美激情在线播放| 日韩小视频在线| 日韩激情av在线免费观看| 亚洲女人初尝黑人巨大| 久久99精品国产99久久6尤物| 98视频在线噜噜噜国产| 国产精品九九九| 欧美日韩福利在线观看| 日韩欧美国产黄色| 亚洲一区二区三区四区在线播放| 中文字幕一区二区精品| 久久久久久久久国产精品| 91精品国产自产在线观看永久| 久久精品人人爽| 欧美黄色小视频| 国模精品视频一区二区三区| 久久天天躁夜夜躁狠狠躁2022| 成人av色在线观看| 黄网站色欧美视频| 欧美日韩中文在线观看| 亚洲a级在线观看| 国产日韩视频在线观看| 日韩亚洲综合在线| 欧美激情久久久久久| 国产精品亚洲片夜色在线| 国产成人久久精品| 国产精品久久久久久久久久| 欧美精品在线免费观看| 日本精品一区二区三区在线播放视频| 亚洲欧美日韩一区二区在线| 欧美性生活大片免费观看网址| 69视频在线免费观看| 欧美成人午夜激情在线| 日本久久久久亚洲中字幕| 欧美日韩亚洲一区二区| 久久久精品国产亚洲| 国产精品久久一区主播| 亚洲va久久久噜噜噜| 97在线精品国自产拍中文| 亚洲成色999久久网站| 精品久久久久久中文字幕| 欧美疯狂做受xxxx高潮| 欧美激情一级二级| 欧美成人午夜免费视在线看片| 欧美黑人国产人伦爽爽爽| 欧美性资源免费| 午夜精品免费视频| 久久久久国产精品免费网站| 色午夜这里只有精品| 国产美女被下药99| 国产欧美日韩丝袜精品一区| 欧美高清视频在线观看| www.欧美三级电影.com| 国产一区二区三区免费视频| 日韩欧美在线观看| 久久的精品视频| 国产在线久久久| 日韩av片永久免费网站| 美日韩精品免费观看视频| 日韩高清av在线| 中文字幕日本欧美| 国产精品入口夜色视频大尺度| 欧洲精品在线视频| 亲子乱一区二区三区电影| 一区二区三区视频免费| 国产69久久精品成人| 92看片淫黄大片看国产片| 亚洲视频电影图片偷拍一区| 精品调教chinesegay| 精品中文视频在线| 国产91ⅴ在线精品免费观看| 国产成人在线一区二区| 91国产精品视频在线| 亚洲一区二区少妇| 欧美激情视频在线| 美日韩精品免费视频| 亚洲最新av在线网站| 97超级碰碰人国产在线观看| 亚洲va男人天堂| 亚洲精品一区中文字幕乱码| 欧美极品在线视频| 国产成人欧美在线观看| 亚洲第一区在线| 亚洲成人久久久| 国产精品观看在线亚洲人成网| 久久久久久久久91| 国产精品激情自拍| 97国产在线观看| 日韩黄色高清视频| 精品国产一区二区三区久久| 成人美女av在线直播| 久久综合久久美利坚合众国| 欧美日韩在线第一页| 精品无码久久久久久国产| 欧美日韩亚洲精品一区二区三区| 欧美日韩免费看| 精品久久久久久国产91| 日韩av在线免费观看一区| 亚洲人永久免费| 亚洲免费视频观看| 欧美孕妇性xx| 日韩视频第一页| 夜夜嗨av色综合久久久综合网| 中文字幕日韩欧美精品在线观看| 精品电影在线观看| 亚洲综合中文字幕在线观看| 成人黄色激情网| 成人激情视频网| 色老头一区二区三区在线观看| 97超碰国产精品女人人人爽| 精品无码久久久久久国产| 韩国欧美亚洲国产| 91在线|亚洲| 亚洲国产精品专区久久| 亚洲国内精品在线|