在OC语言中,协议是一组方法,里面有两种方法,一种是遵守这个协议的类的实例必须实现的方法,另一种是可以实现也可以不实现的方法。
例如我定义一个学生的协议,这个协议里有两个方法,其中一个是必选的方法;学生上学,另一个是可选方法,学生学习。只要是学生,不管大学生,中学生,小学生,只要遵守这个协议,都必须实现学生协议中的必选方法,也就是学生上学的方法。
协议中只声明方法,不需要实现方法。方法的实现在遵守这个协议的类的.m文件中实现。
以下是Student协议的定义:
#import <Foundation/Foundation.h> //协议所遵守的基协议是NSObject
@protocol Student <NSObject> //定义必选方法
@required
-(void)gotoschool; //定义可选方法
@optional
-(void)study; @end
以下是大学生类的.h文件
#import <Foundation/Foundation.h> //导入学生协议头文件
#import "Student.h" //声明大学生类,遵守的student协议用<>括起来
@interface academician : NSObject <Student> @end
以下是大学生类的.h文件:
#import "academician.h" @implementation academician //实现student协议中规定的必须实现的方法
-(void)gotoschool{
NSLog(@"大学生去上学");
} @end
以下是另一个遵守student协议的类:小学生类的.h文件:
#import <Foundation/Foundation.h>
#import "Student.h"
@interface pupil : NSObject <Student> @end
小学生类的.m文件:
#import "pupil.h" @implementation pupil -(void)gotoschool{
NSLog(@"小学生去上学");
} @end
以下是主函数:
#import <Foundation/Foundation.h>
//包含大学生类头文件
#import "academician.h"
//包含小学生类头文件
#import "pupil.h" int main(int argc, const char * argv[]) { // 实例化一个大学生对象
academician *daxuesheng = [[academician alloc]init];
// 大学生对象遵守student协议中的gotoschool方法
[daxuesheng gotoschool]; // 实例化一个小学生对象
pupil *xiaoxuesheng = [[pupil alloc]init];
// 小学生对象遵守student协议中的gotoschool方法
[xiaoxuesheng gotoschool]; return ;
}
注意:在以上例程中,student协议中的可选方法study没有被实现,这是可以的,但是必选方法gotoschool一定要被实现。