------- 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;
5.@property中聲明的屬性也可用做一個遵守協議的限制
@property (nonatomic, strong) 類名<協議名稱> *屬性名
@property (nonatomic, strong) id<協議名稱> 屬性名 //id就相當於 類名*
6.協議可以定義在單獨.h文件中,也可以定義在某一類中
>如果這個協議只用在某個類中,應該把協議定義在該類中
>若果這個協議用在很多類中,就應該定義在單獨文件中
7.分類可以定義在單獨.h和.m文件中,也可以定義在原來類中
>一般情況下,都是定義在單獨文件
>定義在原來類中的分類,只要求能看懂語法