您的位置:首页 > 移动开发 > Objective-C

Objective-C - protocol学习笔记

2015-09-13 19:32 411 查看

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


上面的例子中只遵从了一个协议,也可以遵从多个协议,如果遵从多个协议,需要在尖括号里面提供多个协议名,名称之间以
,
隔开。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: