OC---协议protocol <>
协议protocol <>
基本用途:
* 用来声明一大堆方法(不能声明成员变量)
* 只要某个类遵守了这个协议,就相当于拥有了这个协议中的所有方法声明
* 只要父类遵守了某个协议,就相当于子类也遵守了
* 一个类可以同时遵守多个协议
* 一个协议遵守另外一个协议,就可以拥有另一个协议的所有方法声明
总结:
1.协议的定义:
@protocol 协议名 <NSObject>
// 方法声明列表
// …...
@end
2.如何遵守协议
1> 类遵守协议
@interface 类名 : 父类 <协议名1, 协议名2,...>
@end
2> 协议遵守协议
@protocol 协议名 <要遵守的协议名1, 协议名2,...>
// 方法声明列表
// …...
@end
3.协议中方法声明的关键字
1> @required(默认)
要求实现,如果没有实现该方法,会有警告。。。用于程序员交流
2> @optional
不要求实现,可以不实现,也可以实现
4.定义一个保存对象的变量时,限制这个变量保存的对象要遵守某个协议
类名 <协议名> *变量名 ; NSObject <MyProtocol> *obj;
id <协议名> 变量名; id <MyProtocol> obj2;
如果变量保存的对象没有遵守该协议,编译器会发出严重警告
5. @property中声明的属性也可以做一个遵守协议的限制
@property (nonatomic, strong) 类名 <协议名> *属性名;
@property (nonatomic, strong) Car <MyProtocol> *car;
@property (nonatomic, strong) id <协议名> 属性名;
@property (nonatomic, strong) id <MyProtocol> obj;
6.协议可以定义在单独的.h文件中,也可以定义在某个类的.h文件中
1> 如果这个协议只用在某个类中,应该把协议定义在该类的.h文件中
2> 如果这个协议用在很多类中,就应该定义在单独的.h文件中
分类可以定义在单独的.h和.m文件中,也可以定义在原来类的.h和.m文件中
1> 一般情况下,都是定义在单独的.h和.m文件中
2> 很少情况定义在原来类中