协议(protocol)

本文深入讲解Objective-C中的协议概念,包括其定义、作用及如何在实际编程中运用协议弥补单继承带来的限制。通过实例演示了如何声明并实现协议,帮助读者理解协议与类之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是协议?
**在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.输出结果如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值