iOS代理模式设置方法

代理模式通常用于解决类似这样的问题:我们通过界面A打开了界面B,但在应用进行的过程中,界面B有时候也需要和A主动联络,比如点击某个按钮时。一个比较好的办法是,让A成为B的代理,这样B就可以在需要的时候给A发送消息了。

代理模式的一个好处是,B实际上不需要了解A的任何事情,只要知道A是自己的代理就可以了。在这种模式下,B依然独立与A,实现了松耦合。

对象A是对象B的代理,对象B需要向A发送消息,设置方法分四步:

1、在对象B的.h中定义一个protocol代理协议,并声明一个协议的属性变量

2、让对象B在适当的时候向代理对象A发送消息,比如触发按钮时。

3、让对象A遵从代理协议

4、通知对象B,现在A是它的代理

分步说明:

1、在B.h中定义代理协议和属性变量

 1  /*****B.h*****/
 2
 3 @protocol BDelegate<NSObject>
 4
 5 - (void) degegateMethod:(instanceType)instance;
 6
 7 @end
 8
 9 @interface B
10
11 @property(weak,nonatomic) id<BDelegate> delegate;
12
13 @end

2、在B.m中实现B向A发送消息的方法,以按下done按钮为例:

 1 /*****B.m******/
 2
 3 #import "B.h"
 4
 5 @interface B()
 6
 7 @end
 8
 9 @implementation B
10
11 - (IBAction)done:(id)sender{
12 [self.delegate delegateMethod:instance];
13 }
14
15 @end

3、让A遵从代理协议,在A.h的@interface声明中增添一个尖括号即可

1 /*****A.h*****/
2
3 @interface A<BDelegate>
4
5 @end

4、通知对象B,A已经成为它的代理。在A.m中实现代理方法即可

 1 /*****A.m*****/
 2
 3 #import "A.h"
 4
 5 @interface A()
 6
 7 @end
 8
 9 @implementation A
10
11 - (void)delegateIdentifierMethod:(B *)b{
12 //do something;
13 B.delegate=self;      //identify the delegate of B is A
14 }
15
16 - (void)delegateMethod:(instanceType)instance{
17 //do something
18 }
19
20 @end

需要注意的是,在B.h中声明的代理方法delegateMethod需要在A.m中实现,否则会报错。

时间: 2024-08-12 03:43:35

iOS代理模式设置方法的相关文章

iOS代理模式

iOS代理模式的简单理解:当一个对象无法直接获取到另一个对象的指针,又希望对那个变量进行一些操作时,可以使用代理模式. 代理主要由三部分组成: (1)协议:用来指定代理双方可以做什么,必须做什么. (2)代理:根据指定的协议,完成委托方需要实现的功能. (3)委托:根据指定的协议,指定代理去完成什么功能. 代理使用步骤 1.申明一个协议  (这个写在需要被获取的对象里面,也可以单独写一个类) @protocol TextDelegate -(void)deliverFirsttext:(NSSt

IOS 代理模式 DELEGATE

代理模式:将我(类或结构体)需要来完成的工作交给另一个具备我所要求的能力的人(实现协议的对象)来执行 协议:具备哪些能力 例子:我要去买火车票,没时间买,委托黄牛买票 协议:买票 //: Playground - noun: a place where people can play import UIKit protocol BuyTicketProtocol { // 买票的需求---实际是我需要做的事情 func buyTicket ()-> AnyObject; } class MyTi

ios代理模式-(ViewControler之间传值)

1,新建Single View Application工程,新建SecondViewController 2,在SecondViewController中设置代理 #import <UIKit/UIKit.h> @protocol secondViewControllerDelegate <NSObject> - (NSString *)value; @end @interface SecondViewController : UIViewController @property

Go module的两个代理源和设置方法

Go module的两个代理源 阿里云 https://mirrors.aliyun.com/goproxy/ 使用帮助 1.使用go1.11以上版本并开启go module机制 2.导出GOPROXY环境变量 export GOPROXY=https://mirrors.aliyun.com/goproxy/ 七牛云 https://github.com/goproxy/goproxy.cn/blob/master/README.zh-CN.md 虽然下面的内容主要是讲解如何设置 GOPROX

代理服务器基本知识普及代理IP使用方法!

本文并未从专业角度进行详细讲解,而是从应用的角度出发来普及一些代理服务器的基本知识.文章明显是搜集多方资料的拼凑,而且比较老了,但往往越老的东西越接近事物的本质,更容易窥探到原理,对于刚接触的人来说,看起来比专业理论资料更易懂哈~ 扫盲篇:  什么是代理服务器?  代理服务器是介于浏览器和Web服务器之间的一台服务器,当你通过代理服务器上网浏览时,浏览器不是直接到Web服务器去取回网页,而是向代理服务器发出请求,由代理服务器来取回浏览器所需要的信息,并传送给你的浏览器. 什么是免费代理服务器 ?

爬虫中代理的设置问题介绍

下面我们来梳理一下这些库的代理的设置方法. 1.获取代理 在做测试之前,我们需要先获取一个可用代理,搜索引擎搜索“代理”关键字,就可以看到有许多代理服务网站,在网站上会有很多免费代理,比如西刺:http://www.xicidaili.com/,这里列出了很多免费代理,但是这些免费代理大多数情况下都是不好用的,所以比较靠谱的方法是购买付费代理,很多网站都有售卖,数量不用多,买一个稳定可用的即可,可以自行选购. 或者如果我们本机有相关代理软件的话,软件一般会在本机创建 HTTP 或 SOCKS 代

【iOS开发-57】案例改进:block动画、控件的removeFromSuperview、利用layer设置圆角矩形以及代理模式运用

接上述案例,案例改进:[iOS开发-50]利用创建新的类实现代码封装,从而不知不觉实践一个简单的MVC实验,附带个动画 在上述案例中,我们最后实现了一个动画,点击"下载"按钮变成"已下载"不可点击,然后中间出现提示框. (1)其中有一个小BUG,就是这个提示的透明度变成0之后,这个提示框并没有显示还留在内存中.需要: [tipsLabel removeFromSuperview]; (2)其次,我们可以用另一个代码实现动画,就是用block,这一次是2个block嵌

iOS开发-代理模式

代理模式有的时候也被称之为委托模式,但是实际上两者是有分别的,代理模式为另一个对象提供一个替身或占位符访问这个对象,代理对象和控制访问对象属于同一类,委托对象和对象不一定属于同一类.两者都可以控制类的访问,访问代理的方法A也就意味着访问对象的方法A,访问委托对象方法A执行的是可以是对象的方法B.从实际开发的角度看,委托属于代理模式的扩大版,并没有那么多的限制. 基础知识 代理模式相对比较简单,可以简单的看一下UML类图: 代理模式以便管理客户对对象的访问,管理访问的方式有很多种.远程代理管理客户

iOS中的自定义代理模式

iOS中的自定义代理模式 自定义代理模式分为6步,遵循这6步,就能把代理完整的实现. 1.定义协议(协议中存放代理的任务).我们对于有的自定义的布局视图,并不会带有协议,为了满足我们有时候的开发需求,需要添加代理.那么我们就要先定义一个协议.如下:在自定义视图的DelegateView.h文件中定义一个DelegateViewDelegate协议,协议默认的都是必须的实现的方法,可以根据需求来添加可选实现的方法. 1.定义协议 2.定义代理属性,用来存储代理对象. 2.定义代理属性 3.为Del