OC基础教程9-协议

前言

协议:签订这些条款,后半生灵魂为我所有,我将马上赋予你死神的力量。

这里写图片描述


目标

掌握协议的使用。


内容

1.协议

遵守协议意味着你承诺实现该协议的所有方法。
在ObjC中使用@protocol定义一组方法规范,实现此协议的类必须实现对应的方法。熟悉面向对象的童鞋都知道接口本身是对象行为描述的协议规范。也就是说在ObjC中@protocol和其他语言的接口定义是类似的,只是在ObjC中interface关键字已经用于定义类了,因此它不会再像C#、Java中使用interface定义接口了。
事实上,Objective-C的协议正是受Java接口的启发。

2.声明协议

例:

@protocol NSCopying

- (id) copyWithZone:(NSZone *) zone;

@end

声明协议的语法看起来和声明类或类别的语法有点像,不过这里使用的不是@interface,而是使用@protocol,这是告诉编译器:“下面将是一个新的正式协议。”@protocol后面是协议的名称,协议名称必须要唯一。
你也可以继承父协议,这点与继承父类相似。尖括号里是父协议。

@protocol MySuperDuberProtocol <MyParentProtocol>
@end

再看一个例子,这是Cocoa的NSCoding协议:

@protocol NSCoding
-(void)encodeWithCoder:(NSCoder *)encoder;
-(id)initWithCoder:(NSCoder *)decoder;
@end

当某个类采用NSCoding协议时,便意味着该类承诺将实现这两个方法。

4.协议和数据类型

id类型表示一个可以指向任何类型的对象的指针,它是一个泛型对象类型。
如果一个用尖括号括起来的协议名称跟随在id之后,则编译器(以及阅读此代码的人)将知道你会接受任意类型的对象,但前提你要遵守该协议。

例:

-(void)setObjectValue:(id<NSCopying>)object;

编译器在编译该方法时,将检查参数类型,如果没有遵守协议则提出警告,如“class ‘Triangle”does not implement the ‘NSCopying’ protocol。

Objective-C 2.0增加了两个新的协议修饰符:@optional和@required.
@optional 可选实现的方法
@required 必须实现的方法(不设置则默认是这个)

代码说明:
假设我们定义了一个动物的协议AnimalDelegate,人员Person这个类需要实现这

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值