@protocol 协议
2015-08-25 10:35 TemptationM 阅读(137) 评论(0) 收藏 举报第一步:制定协议者制定协议
在.h的头文件与 @interface 之间制定协议
* 格式: @protocol 协议名称 <NSObject>
* - 方法1
* @optional //用它修饰的下面的方法 被协议者可执行也可不执行
* - 方法2
...
方法1 方法2 即协议内容
第二步: 设置协议人对象(代理人)
格式:在协议人对象的.h中的父类名后面加上
<协议名称>
main.m中[制定协议人 set方法: 代理人];
第三步: 制定协议者通过 设置代理人的方法 设置代理人
在main.m函数中
[制定协议者名称 方法: 代理人]
第四步:对应代理人实现协议中的方法 (协议中的 方法1 方法2...)
在代理人的.h文件中声明 .m文件中实现这些方法
第五步:通知代理人执行
在main.m函数中
[代理人名称 命令代理人执行方法]
第六步:代理人执行方法
注: 制定协议者有一个协议的实例变量
{ //<协议名> 代表代理服从协议 delegate是代理对象
id<MarrigeDeal>_delegate;//设置代理对象 //delegate 代理 代表
}
用set方法设定这个实例变量
1. 协议的定义
@protocol 协议名称<NSObject>
//方法声明列表...
@end
2. 如何遵守协议
1> 一个类如何遵守协议
@interface 类名: 父类名<协议名称1, 协议名称2>
@end
2> 协议遵守协议
@protocol 协议名称<其他协议名称1, 其他协议名称2>
@end
3. 协议中方法声明的关键字
2> @required(默认)
默认要求, 如果没有实现, 会发出警告
2> @optional
不要求实现, 实现不实现都不会警告
4. 定义一个变量的时候, 限制这个变量保存的对象遵守某个协议
类名<协议名称>*变量名
id<协议名称>变量名
NSObject<MyProtocol>*obj;
id<MyProtocol> obj2
如果没有遵守对应的协议, 编译器会警告
5 @protocol中声明的属性也可用做一个遵守协议的限制
@protocol (nonatomic, strong) 类名<协议名称> *属性名
@protocol (nonatomic, strong) id<协议名称> 属性名
6. 协议可以定义在单独.h文件中, 也可用定义在某个类中
1> 如果这个协议只用在某个类中, 应该把协议定义在该类中
2> 如果这个协议用在很多类中, 就应该定义在单独文件中
补充:分类可定义在单独.h和.m文件中, 也可定义在原来类中
1> 一般情况下, 都是定义在单独文件
2> 定义在原来类中的分类, 只要求能看懂语法
浙公网安备 33010602011771号