一、protocol
協定的基本用途:
*聲明方法,可以聲明一大堆的方法,但不能聲明成員變量;
*隻要一個類遵守了謀一份協定,就能擁有這份協定中所有的聲明;
*隻要父類遵守了某個協定,則子類也相當于遵守了該協定。
二、協定格式:
@protocol 協定名稱 方法聲明清單 @end @property myProtocol - (void)test; @end
三、類的協定格式:
@interface 類名:父類 <協定名稱> //... @end @interface Student : Person <myProtocol> //遵守協定後Student中就有了test方法,在Student的實作中需要将此方法實作 @end @implementation Student - (void)test { NSSlog(@"遵守了myProtocol協定"); } @end
四、@protocol關鍵字
*required:要求聲明的方法必須實作
*optional:聲明的方法不要求實作
關鍵字的書寫是為了程式員之間的交流
五、多個協定
@property 協定名稱 <協定名稱1,協定名稱2> @end @property myProtocol <protocol1, protocol2> @end
六、遵守協定
1、定義一個變量的時候,限制這個變量儲存的對象遵守某個協定
類名<協定名稱> *變量名;
id<協定名稱> 變量名; NSObject<myProtocol> *obj; id<myProtocol> obj1;
如果沒有遵守對應的協定,編譯器會警告,此時的警告為整條語句的黃色下劃線
2、@property中聲明的屬性也可用做一個遵守協定的限制
@property (nonatomic, strong) 類名<協定名稱> *屬性名;
@property (nonatomic, strong) id<協定名稱> 屬性名;
@property (nonatomic, strong) Dog<myProtocol> *dog;
@property (nonatomic, strong) id<myProtocol> dog2;
七、協定位置:
*協定可定義在單獨的.h檔案中,也可以定義在某個類中;
*如果這個協定隻用在某個類中,則應該把協定寫在該類的.h檔案中;
*如果這個協定可以被多個類使用,則應該把協定寫在單獨的.h檔案中;
八、分類位置:
*分類跟協定一樣,也可以定義在單獨的.h和.m檔案中,也可用定義在原來類中
*一般情況下,都定義在單獨檔案中;
*定義在原來類中的分類,隻需要了解就可以。