Objective-C - protocol学习笔记
有一些方法它们不属于任何的类,或者不是一个类必须具有的特性,把这些方法抽象出来构成一个集合,称为协议(protocol)。
比如说定义一个类BNRPerson
用于表示人,人有身高、体重、肺活量这些属性,以及能够吃饭和睡觉这些方法。但是人扮演战士的角色时,他可以为自由而战,但是为自由而战并不是人必备的方法,因此将其抽象出来称为协议。比如定义协议BNRPeopleRights
来表示人类权益的集合,并将为自由而战设定为其方法,便定义了一个协议。协议就是一组方法的集合。
一个类若实现协议中定义的方法,则称为遵从(conform)该协议,比如BNRPerson
实现了BNRPeopleRights
中的为自由而战的方法,则称为遵从协议BNRPeopleRights
。
协议(protocol)定义
下面的代码定义了一个协议BNRPeopleRights
,此协议有一个必须实现的方法fightForFreedom
。意味着遵从该协议的类必须实现该方法。
协议也可以继承,比如BNRPeopleRights
继承了NSObject
,但是继承语法与类继承语法不同。
@protocol BNRPeopleRights <NSObject>
@required
- (void)fightForFreedom;
@optional
@end
遵从协议(protocol)
下面的类BNRPerson
遵从了协议BNRPeopleRights
。
#import "BNRPeopleRights.h"
// 遵从协议BNRPeopleRights
@interface BNRPerson : NSObject <BNRPeopleRights>
// 使用property使得编译器自动生成访问器
// 指明属性和类型
@property (nonatomic, readwrite) float heightInMeters;
@property (nonatomic) int weightInKilos;
// 身体质量指数
- (float)bodyMassIndex;
@end
上面的例子中只遵从了一个协议,也可以遵从多个协议,如果遵从多个协议,需要在尖括号里面提供多个协议名,名称之间以,
隔开。