您的位置:首页 > 移动开发 > IOS开发

IOS开发-OC学习-protocol(协议)

2016-03-29 15:11 465 查看
在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 0;
}


注意:在以上例程中,student协议中的可选方法study没有被实现,这是可以的,但是必选方法gotoschool一定要被实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: