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

在OC语言中,协议是一组方法,里面有两种方法,一种是遵守这个协议的类的实例必须实现的方法,另一种是可以实现也可以不实现的方法。

例如我定义一个学生的协议,这个协议里有两个方法,其中一个是必选的方法;学生上学,另一个是可选方法,学生学习。只要是学生,不管大学生,中学生,小学生,只要遵守这个协议,都必须实现学生协议中的必选方法,也就是学生上学的方法。

协议中只声明方法,不需要实现方法。方法的实现在遵守这个协议的类的.m文件中实现。

 

以下是Student协议的定义:

 1 #import <Foundation/Foundation.h>
 2 
 3 //协议所遵守的基协议是NSObject
 4 @protocol Student <NSObject>
 5 
 6 //定义必选方法
 7 @required
 8 -(void)gotoschool;
 9 
10 //定义可选方法
11 @optional
12 -(void)study;
13 
14 @end

以下是大学生类的.h文件

1 #import <Foundation/Foundation.h>
2 
3 //导入学生协议头文件
4 #import "Student.h"
5 
6 //声明大学生类,遵守的student协议用<>括起来
7 @interface academician : NSObject <Student>
8 
9 @end

以下是大学生类的.h文件:

 1 #import "academician.h"
 2 
 3 @implementation academician
 4 
 5 //实现student协议中规定的必须实现的方法
 6 -(void)gotoschool{
 7     NSLog(@"大学生去上学");
 8 }
 9 
10 @end

 

以下是另一个遵守student协议的类:小学生类的.h文件:

1 #import <Foundation/Foundation.h>
2 #import "Student.h"
3 @interface pupil : NSObject <Student>
4 
5 @end

小学生类的.m文件:

1 #import "pupil.h"
2 
3 @implementation pupil
4 
5 -(void)gotoschool{
6     NSLog(@"小学生去上学");
7 }
8 
9 @end

 

以下是主函数:

 1 #import <Foundation/Foundation.h>
 2 //包含大学生类头文件
 3 #import "academician.h"
 4 //包含小学生类头文件
 5 #import "pupil.h"
 6 
 7 int main(int argc, const char * argv[]) {
 8     
 9 //   实例化一个大学生对象
10     academician *daxuesheng = [[academician alloc]init];
11 //    大学生对象遵守student协议中的gotoschool方法
12     [daxuesheng gotoschool];
13     
14 //    实例化一个小学生对象
15     pupil *xiaoxuesheng = [[pupil alloc]init];
16 //    小学生对象遵守student协议中的gotoschool方法
17     [xiaoxuesheng gotoschool];
18 
19     return 0;
20 }

注意:在以上例程中,student协议中的可选方法study没有被实现,这是可以的,但是必选方法gotoschool一定要被实现。

 

转载于:https://www.cnblogs.com/jiwangbujiu/p/5333071.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值