------- android教育訓練、java教育訓練、期待與您交流!
MyProtocal1.h://這是協定類
#import <Foundation/Foundation.h>
@protocol MyProtocol1 <NSObject> //這是基協定,一定要遵守
@required //預設required,必須要實作
- (void)test1;
- (void)test2;
@optional //可選實作
- (void)test3;
@end
MyProtocal2.h://這是協定類
#import <Foundation/Foundation.h>
@protocol MyProtocol2
- (void)haha2;
@optional
- (void)haha3;
@end
隻要一個類遵守了一份協定,就能擁有這份協定中的所有方法聲明
協定不能寫實作,僅僅添加方法聲明
協定和分類一樣,不能寫成員變量
: 繼承父類
<> 遵守協定
Person.h:
#import <Foundation/Foundation.h>
#import "MyProtocol1.h"
#import "MyProtocol2.h"
@interface Person : NSObject <MyProtocol1,MyProtocol2> //類似java中的接口,OC也可以實作多個協定
@end
基本用途:
>可以聲明一堆方法,單不能聲明成員變量
>隻要某個類遵守了這個協定,就相當于擁有這個協定中的所有方法聲明
>隻要父類遵守了某個協定,就相當于子類也遵守了
>用于代理模式和觀察者模式
>一個協定可以遵守另一個協定:
@protocol MyProtocol2 <MyProtocol1>
- (void)haha;
@end
1.協定的定義:
@protocol 協定名稱 <NSObject>
//方法聲明清單
@end
2.如何遵守協定
>類遵守協定:
@interface 類名 : 父類名 <協定名稱1,協定名稱2>
@end
>協定遵守協定
@protocol 協定名稱 <其他協定名稱1,其他協定名稱2>
@end
3.協定中方法聲明的關鍵字
>@required(預設) :要求實作聲明此關鍵字的方法,如果沒有實作,會發出警告
>@optional : 可選實作,不會有警告
4.定義一個變量的時候,限制這個變量儲存的對象遵守某個協定
類名<協定名稱> *變量名
id<協定名稱> 變量名
NSObject<MyProtocol> *obj;
id<MyProtocol>obj2;
[email protected]中聲明的屬性也可用做一個遵守協定的限制
@property (nonatomic, strong) 類名<協定名稱> *屬性名
@property (nonatomic, strong) id<協定名稱> 屬性名 //id就相當于 類名*
6.協定可以定義在單獨.h檔案中,也可以定義在某一類中
>如果這個協定隻用在某個類中,應該把協定定義在該類中
>若果這個協定用在很多類中,就應該定義在單獨檔案中
7.分類可以定義在單獨.h和.m檔案中,也可以定義在原來類中
>一般情況下,都是定義在單獨檔案
>定義在原來類中的分類,隻要求能看懂文法
------- android教育訓練、java教育訓練、期待與您交流!