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

163

被折叠的 条评论
为什么被折叠?



