对Objective-C协议protocol的总结

本文总结了Objective-C中协议protocol的使用,包括声明方法、类遵守协议的两种方式、@required和@optional的区别,以及协议遵守协议的特性。通过协议,类可以实现多行为规范而无需多继承。


前言

Objective-C允许定义协议,声明预期用于特定情况的方法。 协议在符合协议的类中实现。
@protocol PrintProtocolDelegate
-(void)processCompleted;
@end


一、protocol的声明方法

@protocol MyProtocol
//methods
@end
(1)protocol协议只能声明方法(不能实现),不能声明成员变量
(2)声明的方法交给任何遵守协议的类去实现(任何类只要遵守了该协议,就相当于声明了该协议中的所有的方法声明)

二、类遵守协议

NSObject是一个基类,任何其它类最终都要继承它,此外,NSObject也是一个协议,它是一个基协议,每个协议都要遵守这个基协议。

1.类遵守协议的方式

@interface MyClass:NSObject<MyProtocol>
...
@end

不需要类接口中重新声明协议方法
oc中类不可以多继承但是可以同时遵守多个协议。格式是用尖括号括住多个协议名,协议名之间用逗号隔开。

@interface 类名:父类名<协议名1,协议名2.....>
...
@end

2.@required和@optional的区别

@required标识的方法要求必须在遵守该协议的类中实现,否则会出现警告
@optional则表示不要求必须实现
如果协议中声明的方法前面没有加任何标识符,则默认为@required

@protocol MyProtocol
@required
//methods
@optional
//methods
@end

三、协议遵守协议

类可以继承别的类,协议也可以遵守别的协议,一个协议遵守别的协议相当于拥有了其他协议中的所有方法声明
类只能继承一个类,但是一个协议可以同时继承多个协议

@protocol MyProtocol<Protocol1,Protocol2,...>
...
@end

四、其他

定义一个变量的时候,限制这个变量保存的对象遵守某个协议

 类名<协议名称>  *变量名 // 或id<协议名称>  变量名

如果没有遵守对应的协议,编译器会发出严重警告

@property中声明的属性也可以用做一个遵守协议的限制:

 @property (nonatomic,strong)类名<协议名称> *属性名 // 或@property(nonatomic,strong)id<协议名称> 属性名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值