ios中的代理与协议(delegate)
来源:互联网 发布:冰川网络的游戏怎么样 编辑:程序博客网 时间:2024/05/17 07:15
源码地址 :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];
三 代理设计模式的基本思想:两个对象协同解决问题,通过代理实现对象与对象之间的通信。
实质:通过传递对象,调用方法。
注意:协议本身不是类,没有父类并且不能定义实例变量,只是对方法的声明,不进行方法的实现;
协议用于专门声明被别的类实现的方法,方法功能更灵活。
- ios中的代理与协议(delegate)
- iOS中的协议(Protocol)与代理(Delegate)
- 【IOS沉思录】IOS中的协议Protocol与代理Delegate
- IOS中的协议与代理
- Protocol 协议 与 delegate 代理
- iOS代理与协议
- ios协议 与代理
- ios委托delegate与协议protocol
- IOS学习之一个示例弄懂代理(delegate)和协议
- IOS学习之一个示例弄懂代理(delegate)和协议
- iOS开发之Protocol (协议) 和delegate(代理)
- IOS学习之一个示例弄懂代理(delegate)和协议
- 快速理解ios的委托协议代理(delegate)
- IOS学习之一个示例弄懂代理(delegate)和协议
- protocol与delegate,代理(委托)与协议总结
- IOS中的协议-代理,传值
- IOS Delegate代理实现
- iOS 代理Delegate
- 写报告心法
- LeetCode 25 Reverse Nodes in k-Group
- 题目1008:最短路径问题
- C++链接错误“对函数或变量未定义的引用”解决办法
- 8-17
- ios中的代理与协议(delegate)
- HDU 5100 Chessboard (用k×1的矩形覆盖n×n的正方形)(找规律)
- uva 10585 - Center of symmetry(水)
- 数据结构:可合并堆——左偏树
- Google之文件系统GFS
- R语言中常用的语法
- 如何在github上提交项目
- Android的发展历史
- Android Api Demos登顶之路(三十四)Device Admin