作用
协议是一组方法声明,其中部分方法是必需的,另一些是可选的。
如何使用
@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>