代码改变世界

@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> 定义在原来类中的分类, 只要求能看懂语法