iOS开发设计模式之代理

  • 代理设计模式

代理设计模式,也称“委托”,顾名思义就是委托别人去做事情

在代理模式中,一方称为委托方,另一方称为代理方。

委托方和代理方通过协议联系到一起。

当委托方想要让代理方做事情时只需向代理发送代理消息

代理的作用:

1)对象间传递事件 :孩子告诉妈妈饿了

2)对象间传递数值 :告诉妈妈饿了的同时告诉想吃什么

代理方法中使用参数

3)为自身的属性赋值 :孩子告诉妈妈饿了同时要得到妈妈做的食物

代理方法中使用返回值

  • 代理设计模式的使用步骤
  1. 委托方:提出代理协议
@protocol AMViewDelegate <NSObject>
@optional
- (void) view:(AMView*) view detailInfoWithState:(BOOL) state;
@end

2. 委托方:添加代理对象属性

@interface AMView : UIView
@property (nonatomic, weak) id<AMAppViewDelegate> delegate;

3. 代理方:遵循代理协议

@interface ViewController() <AMAppViewDelegate>

4. 代理方:成为委托方的代理者

view.delegate = self;

5. 代理方:实现代理方法

- (void) view:(AMView*) view detailInfoWithState:(BOOL) state
{
    //...
}

6. 委托方:通过代理属性调用代理方法

- (IBAction) nameBtnClicked:(id) sender {
    if ( self.delegate && [self.delegate respondsToSelector:@selector(view:detailInfoWithState:] ) {
        [self.delegate view:self detailInfoWithState:NO];
    }
}
时间: 2024-08-06 11:57:11

iOS开发设计模式之代理的相关文章

iOS开发之地图代理不起作用(提示vImage decode failed, falling back to CG path.)

项目中用到了地图相关的东西,就把以前的demo搬了出来,结果发现直接运行之前的demo没有问题,在xcode5下新建项目再把代码粘贴过来就会提示 May 5 11:36:21 infomedia-iPod-touch TestLocation[1465] <Error>: CGBitmapContextCreate: unsupported parameter combination: 5 integer bits/component; 16 bits/pixel; 3-component c

iOS开发设计模式之MVC

本片文章介绍MVC设计模式及其在iOS开发中的使用技巧 什么是MVC设计模式 MVC是设计模式的起源,也是在软件工程领域使用最多的一种设计模式. MVC即:Model模型.View视图.Controller控制器 模型: 在模型对象中封装数据并定义操作数据的特定逻辑行为 模型可以表示复杂的数据结构,可以是屏幕上显示的数据.等待处理的数据等 视图: 使用视图对象向用户展示信息 视图对象可以响应用户的操作,并懂得如何将自己展现在屏幕上 视图对象通常从应用程序的模型对象中获取数据用以展示. 可以跟一个

手机测试环境调试 -- 微信,Android,IOS开发使用Fiddler代理

CleverCode最近在做微信开发.在调试内网用手机调试微信公众号开发的时候,发现访问触屏版配置host页面非常麻烦.最好找到一个代理工具Fiddler. 1 代理原理 1.1 不使用代理 1.2 使用代理原理 2 下载Fiddler http://download.csdn.net/detail/clevercode/9562122 3 配置Fiddler 选择 Tools >Fildder Options 4 重启Fiddler 关闭Fiddler:File > Exit; 打开Fidd

iOS开发总结——协议代理的认识

1.前言 自今年5月底正式转iOS之后,天天get新技能,很多技能在脑子里回旋不吐不快,所以,写点东西整理一下.先从协议代理开始. 2.协议方法的声明 @protocol EventMenuBarDelegate <NSObject> - (void)delegateShouldDoWhenMenuButtonTapped:(UIButton *)button; @end 以上代码意思是,利用@protocol 指令声明协议名EventMenuBarDelegate,并遵从NSObject协议

iOS开发——UI篇&amp;代理/通知/Block传值(实现UItableView分组的收缩与展开)

代理/通知/Block传值实现UItableView分组的收缩与展开 初始化之后出现下面的界面 准备: 1:定义一个BOOL值用来记录点击 1 @property (nonatomic, assign, getter = isOpen) BOOL open; 2:在相应的点击方法里面是实现点击 1 self.group.open = !self.group.open; 3:在numberOfRowsInSection中返回的时候使用三木判断是否点击,并且实现伸缩与展开, 1 return mod

iOS开发:使用代理模式监听开关状态改变事件

记一次解决跨控制器监听开关状态改变的尝试. 为了统一设置UITableViewCell里的内容,自定义了UITableViewCell类的一个基类,命名为SettingCell.SettingCell里显示的内容由数据模型SettingItem提供:在SettingCell里定义一个属性即可. @property (nonatomic, strong) SettingItem *item; 再定义几个SettingItem的子类表示显示不同内容的Cell(如图1).由于所有开关状态的归档和解档都

iOS开发设计模式之单例设计模式

单例设计模式 是一种常用的软件设计模式,保证系统中的一个类只有一个实例而且该实例易于被外界访问. 单例的英文:singleton,在数学中的含义是:有且仅有一个元素的集合. 如果希望系统中某个类的对象只能存在一个,单例模式是最好的解决方案 优点: 可以阻止其他对象实例化对象的副本,从而确保所有对象都访问唯一实例 缺点: 单例对象一旦创建,对象指针保存在全局静态区,而单例对象在堆中分配内存空间,在应用程序终止后才会被释放 使用到单例设计模式的类:(大部分用于管理系统的资源) UIApplicati

【iOS开发-26】利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值

实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个值传递给B类中得某个值(所以需要在B类中先准备一个变量来接受,就是用@property和@synthesize整个变量即可). (2)反向传值:比如需要把B类中的值传递给A类用.我们先在B类中写一个协议,协议里面有一个可以带参数的方法,这个参数就是我们要传递的值(这个协议也可以单独写,不一定写在B类中),然后B类遵循这个协议后,利用这个协议创建一个委托变

iOS开发:控制器间的数据传递

在iOS开发中遇到的控制器间的数据传递主要有两种情况:顺传递与逆传递.顺传递是指数据的传递方向和控制器的跳转方向相同(如图1):逆传递是指数据的传递方向和控制器的跳转方向相反(如图2).这里分别介绍这两种传递方式的具体做法. 顺传递 如果是用的SB,顺传递较简单,只需在A控制器的prepareForSegue:sender:方法中根据segue参数取得destinationViewController,也就是目标控制器C,直接给控制器C传递数据.从A传来的数据要在C的viewDidLoad方法中