协议protocol
在objective-c中使用@protocol来定义一组方法规范,实现此协议的类必须实现对应的方法。就跟java、c#中的接口本身就是对象行为描述的协议范围类似,只是在oc中interface关键字用于定义类的声明了。
假设定义了一个动物的协议AnimalDelegate,人员Person这个类需要实现这个协议,代码如下:
AnimalDelegate.h(声明协议的头文件)
@protocol AnimalDelegate < NSObject >
@required
- (void)eat;
@optional
- (void)run;
- (void)say;
- (void)sleep;
@end
Person.h
#import <Foundation/Foundaytion.h>
#import "AnimalDelegate.h"
@interface Person : NSObject < AnimalDelegate >
- (void)eat;
@end
Person.m
#import "Person.h"
@implementation Person
- (void)eat{
NSLog(@"eating...");
}
需要说明一下几点:
- 1 .一个协议可以扩展自另一个协议,例如上面AnimalDelegate就扩展自NSObject,如需要扩展多个协议中间使用逗号隔开
- 2 .跟其他高级语言借口不同的是协议中定义的方法不一定是必须实现的,我们可以通过关键字@required和@optional(注意:oc是弱语法,及时不实现必须实现的方法编译运行也不会报错);
- 3 .协议通过< >进行实现,一个类可以同时实现多个协议,中间用逗号隔开;
- 4 .协议的实现只能在类的声明上,不能放到类的实现上(也就是说必须写成@interface Person :NSObject < AnimalDelegate >而不能写成@implementation Person < AnimalDelegate >)
- 5 .协议中不能定义属性,成员变量等,只能定义方法。