一.什么是协议(protocol)?
1. 协议是多个对象之间协商的一个接口对象。
2. 协议提供一系列方法用来在协议的实现者和代理者之间的一种通信方式
3. 协议可以用来声明一大堆方法(不能申明成员变量)
4. 只要某个类遵守了这个协议,就相当于拥有了这个协议中的所有方法申明
5. 只要父类遵守了某个协议,就相当于子类也遵守了。
6. 类遵守协议 ,协议遵守协议
二.protocol的格式
语法:
@protocol 协议名称 <NSObject> //协议需要继承基协议
//方法的声明列表
@end
三.常识:
1.协议中有两个关键字可以控制方法是否要实现 ,用途在于程序员之间的交流 :
语法:
@required://这个方法必须要实现(默认)
@optional://不一定要实现
2.某个类遵守协议
语法:
@interface 类名 : 父类<协议名称>
@end
3.一个类可以遵守多个协议
语法:
//, 类同时遵守多份协议
@interface 类名: 父类 <协议名1,协议名2 > //Person类同时遵守多个协议用逗号[,]隔开
4.协议遵守其他协议 ,相当于拥有了其他协议中的方法声明:
语法:
//, 协议遵守其他协议
@protocol 协议名<其他协议名1,其他协议名2 >
5.protocol的基协议
• NSObject是一个基类,最根本最基本的类,任何其他类最终都要继承它
• NSObject是一个协议,最根本最基本的协议,任何协议最终都要继承它
• NSObject协议中声明很多最基本的方法,比如description、retain、release等
• 建议每个新协议都遵守NSObject协议
• 让对象遵守协议即可限制对象类: 语法:
//限制对象必须遵守某个协议写法
对象名<协议名> *obj3 = [[对象名 alloc] init];
6.protocol的提前声明
• 关键字@protocol 与@class 原理一样(系统调优),仅仅只是引入协议,在需要使用的协议的类使用@import导入 :
//告诉类 MyProtocol是一个协议
@protocol MyProtocol;
7.protocol的判断定义
respondsToSelector:@selector,这个方法的作用是判断当前对象中是否定义了一个方法,这个方法还是很有用的。