国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

iOS階段學習第19天筆記(協議-Protocol)

2019-11-14 18:43:01
字體:
來源:轉載
供稿:網友

iOS學習(OC語言)知識點整理

一、關于協議(PRotocol)的介紹

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

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

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

4)協議中聲明方法,默認是required 表明方法是必須要實現的,否則會有系統警告,但不會報錯

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

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

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

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

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

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


  2、定義一個Person類 在.h文件中使用協議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文件中實現協議方法 例如: 

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

 

 4、在main文件中執行方法 例如:

 1  Person *p1=[[Person alloc]init]; 2   //判斷p1所屬的類是否遵守了協議 3   if([p1 conformsToProtocol:@protocol(MyProtocol)]){ 4   //判斷p1所屬的類是否實現了方法 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協議17    id<MyProtocol> obj4=[[Person alloc]init];18    Person<MyProtocol> *obj5=[[Person alloc]init];

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

11)協議主要用來統一規范接口;統一接口的方法:繼承和協議

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东乡县| 思南县| 刚察县| 浮山县| 房产| 凤山县| 金门县| 南开区| 平定县| 阿坝县| 肃南| 大化| 二连浩特市| 噶尔县| 门源| 民县| 莆田市| 桑植县| 瑞金市| 共和县| 平顶山市| 抚州市| 神木县| 正阳县| 博白县| 穆棱市| 饶平县| 平南县| 栖霞市| 含山县| 南雄市| 萨嘎县| 驻马店市| 龙泉市| 贵溪市| 新龙县| 阿瓦提县| 华容县| 广灵县| 乌拉特后旗| 遵义市|