作用
協議是一組方法聲明,其中部分方法是必需的,另一些是可選的。
如何使用
@required:遵守此協議的類必須實現它修飾的方法(默認修飾符)
@optional:遵守此協議的類可以不實現它修飾的方法
@protocol PersonProtocol <NSObject>
@required
- (void)eat;
@optional
- (void)run;
@end
協議可以聲明屬性,但必須在遵守此協議的類中調用@synthesize ivar;才能正常使用。
// 協議
@protocol PersonProtocol <NSObject>
@property (nonatomic, copy) NSString *name;
@end
// Person
@interface Person : NSObject <PersonProtocol>
@end
@implementation Person
@synthesize name;
@end
// 使用
Person *person = [Person new];
person.name = @"111";
NSLog(@"name---%@", person.name);
不能聲明成員變量
特點
1、協議只有方法的聲明,沒有方法的實現
2、遵守協議只能在類的聲明@interface上,不能在類的實現@implementation上。
3、一個協議可以遵守多個其他協議
4、一個協議若遵守了其他協議,就擁有了其他協議所有方法的聲明
5、一個協議可以被任何類遵守,一個類可以遵守多個協議
6、一個類若遵守了某個協議,就必須實現協議中@required修飾的方法
7、若父類遵守了某個協議,子類也就遵守了此協議
例子
@interface AWEViewController () <UITableViewDelegate, UITableViewDataSource>