麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

iOS階段學(xué)習(xí)第19天筆記(協(xié)議-Protocol)

2019-11-14 18:43:01
字體:
供稿:網(wǎng)友

iOS學(xué)習(xí)(OC語言)知識點(diǎn)整理

一、關(guān)于協(xié)議(PRotocol)的介紹

1)概念:協(xié)議指多個對象之間協(xié)商的一個接口對象,協(xié)議提供了一些方法用在協(xié)議的實現(xiàn)者和代理者
      之間通訊的一種方式

2)聲明一個協(xié)議@protocol協(xié)議的名字<基協(xié)議> 一個協(xié)議可以遵守另一個協(xié)議:
      基協(xié)議(這個協(xié)議就擁有了基協(xié)議中所有方法的聲明)

3)協(xié)議中不能聲明成員變量,只能有方法聲明。

4)協(xié)議中聲明方法,默認(rèn)是required 表明方法是必須要實現(xiàn)的,否則會有系統(tǒng)警告,但不會報錯

5)協(xié)議中@optional表明方法是可選的(可以實現(xiàn)也可以不實現(xiàn))

6)使用協(xié)議:某個類遵守協(xié)議,類名后面<協(xié)議名> ;所謂遵守協(xié)議就是:類擁有了協(xié)議中所有方法的聲明,
      必須實現(xiàn)協(xié)議中規(guī)定的方法;一個類可以遵守多個協(xié)議(類擁有所有協(xié)議中聲明的方法,必須實現(xiàn)所有
      協(xié)議中規(guī)定的方法)

7)一個協(xié)議可以遵守另一個協(xié)議,遵守協(xié)議后就擁有了另一個協(xié)議所有方法的聲明,同時還可以添加自己的方法

8)一個協(xié)議可以遵守多個協(xié)議,并擁有所有基協(xié)議的方法

9)協(xié)議的聲明與使用方法 實例代碼:
 
    1、添加一個基于Protocol命名為MyProtocol的.h 文件  聲明一些協(xié)議方法 例如: 

 1 #import <Foundation/Foundation.h> 2 @protocol MyProtocol <NSObject> 3 //協(xié)議中不能聲明成員變量,只有方法 4 //{ 5 //    int _a; 6 //} 7 //協(xié)議中聲明方法,默認(rèn)是required 8 -(void)test1; 9 -(void)test2;10 //@required表明方法是必須要實現(xiàn)的11 @required12 -(void)test3;13 //@optional表明方法是可選的(可以實現(xiàn)也可以不實現(xiàn))14 @optional15 -(void)test4;16 @end


  2、定義一個Person類 在.h文件中使用協(xié)議MyProtocol  例如: 

1 #import <Foundation/Foundation.h>2 #import "MyProtocol.h"   3 @interface Person : NSObject<MyProtocol>4 @property(nonatomic,copy)NSString *name;5 -(void)print;6 @end

 

  3、在Person類的.m文件中實現(xiàn)協(xié)議方法 例如: 

 1    #import "Person.h" 2     @implementation Person 3     -(void)print 4     { 5      NSLog(@"person:%@",self.name); 6     } 7     //實現(xiàn)協(xié)議中規(guī)定的方法 8     -(void)test1 9     {10       NSLog(@"test1");11     }12     -(void)test213     {14     15     }16     -(void)test317     {18     19     }20  21     @end

 

 4、在main文件中執(zhí)行方法 例如:

 1  Person *p1=[[Person alloc]init]; 2   //判斷p1所屬的類是否遵守了協(xié)議 3   if([p1 conformsToProtocol:@protocol(MyProtocol)]){ 4   //判斷p1所屬的類是否實現(xiàn)了方法 5   if([p1 respondsToSelector:@selector(test1)]){ 6        [p1 test1]; 7       } 8    } 9         10    NSObject *obj1=[[NSObject alloc]init];11    obj1=nil;12    NSObject *obj2=@"hello";13    obj2=nil;14    //對obj3指向的對象做一個限制15    NSObject<MyProtocol> *obj3=@"abc";16    //obj4可以指向任意類型的對象,但是必須遵守MyProtocol協(xié)議17    id<MyProtocol> obj4=[[Person alloc]init];18    Person<MyProtocol> *obj5=[[Person alloc]init];

  
10)OC中沒有多繼承,但可以通過協(xié)議實現(xiàn),可通過使用多個協(xié)議來實現(xiàn)類似多繼承的方法。

11)協(xié)議主要用來統(tǒng)一規(guī)范接口;統(tǒng)一接口的方法:繼承和協(xié)議

12)協(xié)議與繼承的區(qū)別
     
    1、繼承也可以統(tǒng)一規(guī)范接口:子類繼承父類所有的方法(可以不用重寫,除非父類的方法不適合子類),
         重寫后的方法名與父類一樣,達(dá)到了統(tǒng)一接口的目的;子類中可以增加成員變量
 
    2、協(xié)議:一個類遵守協(xié)議,類就具有協(xié)議中所有的方法,如果多個類都遵守同一個協(xié)議,這些類都有協(xié)議
         中規(guī)范的方法,達(dá)到了統(tǒng)一接口的目的;協(xié)議中不能有成員變量


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产69久久精品成人看 | 91久久久久久亚洲精品禁果 | 日韩视频在线视频 | 少妇一级淫片免费放播放 | 国产日韩免费观看 | 男女羞羞的视频 | 欧美日韩大片在线观看 | 久久精品免费网站 | 久久激情小视频 | 精品国内视频 | 国产美女爽到喷白浆的 | 欧美日韩免费一区 | 1314av| 天天碰天天操 | 特级黄aaaaaaaaa毛片 | 欧美成年人在线视频 | 国产成人精品区 | 欧美一级淫片免费播放口 | 日本中文字幕久久 | 欧美精品成人一区二区在线观看 | 毛片视频大全 | 久久久成人精品视频 | 国产视频在线免费观看 | 九九黄色影院 | 国产一区二区免费在线观看 | 1区2区3区国产 | 经典三级在线视频 | 伊人网站 | 202z中文字幕第一页 | 国产福利视频在线观看 | 91福利免费观看 | 91精品国产一区二区三区动漫 | 欧美一级黄色影院 | 中国7777高潮网站 | 成人一级视频 | 免费黄色a| 欧美一级网 | 久久精品欧美一区二区三区不卡 | 在线看一区二区三区 | 久久精品综合视频 | 久久久成人精品视频 |