什么是协议?
**在OC中,一个类可以实现多个协议,通过协议可以弥补单继承的缺陷.但是协议跟继承不一样,协议只是一个方法列表,方法的实现得靠遵循该协议的类去完成.
协议:协议是一套标准,这个标准里面声明了很多方法,但是不关心具体这些方法是怎么实现的,具体的实现是由遵循这个协议的类去完成的**
语法:
@protocol 协议名称
//方法列表
@end
了解了什么是协议的这个概念,趁热打铁.那么我们来上代码吧!
首先我们新建一个万能的Student类,和一个Teacher类.
1.在我们创建的Teacher类里面声明一个协议和两个方法
其中一个是要求我们必须要实现的,另外一个则可选择实现
@protocol CollectHomeWork <NSObject>
/**
* 必须实现的
*/
//声明一个收作业的方法
@required
-(void)collecHomeWork:(BOOL)flag;
/**
* 可选择实现
*/
@optional
-(void)sayHello;
@end
2.在teacher类里面声明两个属性
3.Teacher.m
-(void)setFlag:(BOOL)flag{
_flag = flag;
// conformsToProtocol 确定一个对象是否实现了某个协议
//如果代理这个对象存在,并且代理遵循某个协议就实现收作业(collecHomeWork)的方法
if (self.delegate && [self.delegate conformsToProtocol:@protocol(CollectHomeWork)]) {
[self.delegate collecHomeWork:_flag];
}else{
NSLog(@"代理不存在");
}
}
@end
4.来到我们万能的Student类的.h文件
Studnet遵循Teacher的协议,所以要在Student.m中实现Teacher的收作业方法
5.Student.m
6.把Studen.和Teacher的头文件导入我们的主函数中,并且创建两个类的对象
7.输出结果如下: