黑馬程序員——IOS基礎——Protocol協議

------- 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文件中,也可以定義在原來類中
>一般情況下,都是定義在單獨文件
>定義在原來類中的分類,只要求能看懂語法








------- android培訓java培訓、期待與您交流!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章