IOS階段學習第19天筆記(協議-Protocol),ios-protocol

來源:互聯網
上載者:User

IOS階段學習第19天筆記(協議-Protocol),ios-protocol

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)協議主要用來統一規範介面;統一介面的方法:繼承和協議

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.