- 可以用來聲明一大堆方法(不能聲明成員變量)
- 只要某個類遵守了這個協議,就相當于擁有這個協議中的所有方法聲明
- 只要父類遵守了某個協議,就相當于子類也遵守了
MyProtocol.h
@protocol MyProtocol <NSObject>
@required//要求實現,不識閑會發出警告,如果什么都不寫,默認是@required
-(void) test;
-(void) test2;
@optional//不要求實現
-(void) test3;
@end
Person.h
@protocol MyProtocol;//協議的提前聲明,類似@class
@interface Person : NSObject <MyProtocol>
@end
Person.m
#import MyProtocol.h;
@implementation Person
-(void) test{
}
-(void) test2{
}
@end
- 一個協議可以遵守其他多個協議,多個協議之間用逗號 , 隔開
- 一個協議遵守了其他協議,就相當于擁有了其他協議中的方法聲明
@protocol 協議名稱 <協議1, 協議2>
@end
1》類遵守協議:
@interface 類名 : 父類名<協議名稱1,協議名稱2>
@end
2》協議遵守協議:
@protocol 協議名稱 <其他協議名稱1,其他協議名稱2>
@end
1. 基協議
- NSObject是一個基類,最根本最基本的類,任何其他類最終都要繼承它
- 其實還有一個協議,名字也叫NSObject,它是一個基協議,最根本最基本的協議
- NSObject協議中聲明很多最基本的方法,比如description、retain、release等
- 建議每個新的協議都要遵守NSObject協議
要求obj3保存的對象必須是遵守MyProtocol這個協議;
NSObject<MyProtocol> *obj3;
id<MyProtocol> obj3;
要求obj4,保存的對象必須遵守MyProtocol3,并且繼承了Person
Person<MyProtocol3> *obj4;
@property中聲明的屬性也可用做一個遵守協議的限制
@property (nonatomic,strong)類名<協議名稱> * 屬性名;
@property (nonatomic,strong)id<協議名稱> 屬性名;
協議可定義在單獨.h文件中,也可以定義在某個類中
1》如果這個協議只用在某個類中,應該把協議定義在該類中
2》如果這個協議用在很多類中,就應該定義在單獨文件中
分類可定義在單獨.h和.m文件中,也可以定義在原來類中
1》一般情況下,都是定義在單獨文件
2》定義在原來類中的分類,只要求能看懂語法
#import "TicketDelegate.h"
@interface Person : NSObject
-(void) buyTicket;
//擁有一個代理屬性,代理的類名隨便,必須遵守TicketDeltegate協議
@property (nonatomic,retain) id<TicketDelegate> delegate;
@end