正式协议

本文介绍了Objective-C中的协议(protocol)概念,包括如何定义和使用协议,以及协议与类之间的关系。文章详细解释了@required和@optional关键字的作用,并给出了具体的代码示例。

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

协议protocol

在objective-c中使用@protocol来定义一组方法规范,实现此协议的类必须实现对应的方法。就跟java、c#中的接口本身就是对象行为描述的协议范围类似,只是在oc中interface关键字用于定义类的声明了。
假设定义了一个动物的协议AnimalDelegate,人员Person这个类需要实现这个协议,代码如下:
AnimalDelegate.h(声明协议的头文件)

@protocol AnimalDelegate < NSObject >

@required//在required关键字下面的方法,是代理人(实现协议的类)必须实现的方法
- (void)eat;

@optional//表示可选择实现的方法
- (void)run;
- (void)say;
- (void)sleep;

@end
Person.h
#import <Foundation/Foundaytion.h>
#import "AnimalDelegate.h"
//在类的声明中引入委托,证明使用了委托
@interface Person : NSObject < AnimalDelegate >

- (void)eat;

@end
Person.m
#import "Person.h"

@implementation Person

- (void)eat{
   NSLog(@"eating...");
}
需要说明一下几点:
  • 1 .一个协议可以扩展自另一个协议,例如上面AnimalDelegate就扩展自NSObject,如需要扩展多个协议中间使用逗号隔开
  • 2 .跟其他高级语言借口不同的是协议中定义的方法不一定是必须实现的,我们可以通过关键字@required和@optional(注意:oc是弱语法,及时不实现必须实现的方法编译运行也不会报错);
  • 3 .协议通过< >进行实现,一个类可以同时实现多个协议,中间用逗号隔开;
  • 4 .协议的实现只能在类的声明上,不能放到类的实现上(也就是说必须写成@interface Person :NSObject < AnimalDelegate >而不能写成@implementation Person < AnimalDelegate >)
  • 5 .协议中不能定义属性,成员变量等,只能定义方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值