标签:
源码地址 :http://download.csdn.net/download/swanzhu/9016861
一、理解协议与代理
协议
协议的格式:@protocol关键字:协议的声明
例如
@protocol CustomAlertViewDelegate <NSObject>
<methods>协议的方法
@optional
//此关键字下声明的方法,是可选实现的方法。
@required
//此关键字声明的方法为,必须实现的方法,如果不实现,编译会报警告,程序运行崩溃。
//如果没有规定方法属于可选还是必须实现的,默认为@required。
@end
二 代理
代理是一个抽象的概念,我如果想做一件事情,而我自己并不想做,可以让别人帮我来做,那么别人就是我的代理.
例如,我想租个房子,我自己比较懒,于是我想到中介加50块钱的手续费就可以帮我找到房子,我于是给中介打电话,委托中介给我找个房子,此时中介就是我的代理,我委托他帮我找房.
这个例子中,中介就是代理,50块钱的手续费就是协议.
1.先声明好协议:创建协议文件
//协议声明
@protocol ChangeColorDelegate <NSObject>
//方法
-(void)changeColor;
(2)那么(A)就需要指定让谁(委托人)去执行协议。
在A.h中声明一个属性 B*delegate;代表委托人(代理)是谁(B类的对象)。
id<协议> delegate;委托人可以是任何实现协议类的对象
//声明
@protocol ChangeColorDelegate;
//指定代理对象,,
@property(nonatomic,assign)id<ChangeColorDelegate>delegate;
(3)委托人B(代理)就需要遵守协议,并按照协议完成规定的内容。
1.B首先要实现协议 :在B.h中通过<协议名>实现协议。
//实现协议,此时别忘了导入头文件
@interface ZYFirstViewController : UIViewController<ChangeColorDelegate>
2.需要在B.m中设置代理: a.delegate = self. (self指B类的对象)
// 指定代理
second.delegate=self;
3.实现协议方法。
//实现协议方法
-(void)changeColor { self.view.backgroundColor=[UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1.0]; [self.navigationController popViewControllerAnimated:YES]; }
4.指定代理在什么情况下执行协议方法。
// 指定在什么条件下执行
[_delegate changeColor];
三 代理设计模式的基本思想:两个对象协同解决问题,通过代理实现对象与对象之间的通信。
实质:通过传递对象,调用方法。
注意:协议本身不是类,没有父类并且不能定义实例变量,只是对方法的声明,不进行方法的实现;
协议用于专门声明被别的类实现的方法,方法功能更灵活。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/swanzhu/article/details/47732559