IOS代理
之前看过一些关于代理的资料,始终感觉还是很模糊,最近抽出一段空闲的时间,将这块内容整理下:
什么是代理,顾名思义就是帮别人做些事情,比如买房子,当我们买房子时,我们一般会找房屋中介,因为他们就是干这件事情,他们比我们普通人在这方面了解的多,此时房屋中介就是我们所谓的代理,他们将会提供买房者所需的资料,比如房屋的价格,房屋的面积等信息,根据以上环境我们开始编码,实现通过代理模式实现以上功能。
简单的代理实现:
1.代理,听到这个词我们很明确知道我们需要两个主角(1)买房子的人(person)(2)房子中介(medium),房子中介需要做我们的代理,帮我们处理一些事物,知道这些首先定义两个类:
Person类
#import <Foundation/Foundation.h>
#import "Medium" @interface Person : NSObject @property(nonatomic,retain) Medium *delegate;
// 买房
- (void)buyHome; @end @implementation Person - (void)buyHome
{
double price = [_delegate homePrice];
double size = [_delegate homeSize];
NSLog(@"房屋中介反馈: 房子价格:%f 房屋面积:%f",price,size);
} - (void)dealloc
{
// 成员变量用到retain关键字,必须在dealloc中销毁一次,这块不详细讲内存管理。
[_delegate replease];
[super dealloc];
} @end
NOTE
person类都做了什么?
1):买房者需要买房,那我们必须提供一个买房的方法,buyHome()。
2):买房必须知道房屋的面积以及价格,这些信息必须通过房屋中介获取,因此我们需要将房屋中介引入到Person类中。
Medium类
#import <Foundation/Foundation.h> @interface Medium : NSObject // 房子的价格
- (double)homeCost; // 房子大小
- (double)homeSize; @end @implementation Medium // 房子的价格
- (double)homeCost;
{
return ;
} // 房子大小
- (double)homeSize
{
return ;
} @end
NOTE
medium类做了什么?
1):房屋中介需要从买房者哪里获取到房屋面积,以及出售的价格,以提供给买房者。
main类
#import <Fundation/Foundation.h>
#import "Person"
#import "Medium" int main(int argv,const char* argc[])
{ @autoreleasepool
{
Person *person = [[[Person alloc]init]autorelease];
Medium *medium = [[[Medium alloc]init]autorelease]; // person获取中介的实例对象
person.delegate = medium; // 中介提供房子的详细情况
[person buyHome];
}
return ;
}
流程图:(以下流程图是一个完整买房流程)

根据这个流程图我们再分析下买房这个过程:
1)房屋中介通过自己方式获取到卖方者的一切属性,比如房屋的价格,房屋的面积,房屋的地理位置。
2)房屋中介提供房源信息给买房者。
3)买房者决定最终是否购买房子。
这个流程图中我们只需要关注橙色区域的对象,买房者和房屋中介。
买房者:中介我想了解下现有房源的价格,面积,地址。
中介:我们这里现在有100*100m,价格在200W的房子,地址在上海泗泾,你看是否需要。
买房者:这套房子还不错,考虑下,还有其他选择嘛。
中介:必须有……。
正直意义的代理:
以上是一个简单的代理模式,买房者无需通过卖方者的获取房屋信息,一家一家问太累了,直接问中介多省事,但是有个问题,如果买房者把这件事情和其他人交流了下,其中有人说,这家中介太黑了,收取的中介费比其他中介高的高,此刻怎么办,最简单的方式就是换另外一家中介,那程序中又是如何实现。
分析:
此刻我们需要把那家中介(medium)从我们的person类中剔除,person需要一个动态的中介,可以选择的中介。
如果是这样,我们就必须定义协议,如果那个中介想申请当我的代理,那就必须遵守我们的协议,不然我就不考虑,那我协议中都定义什么方法了,和上面的方法一样,一个是房子的价格,一个是房子的面积。
协议的定义:
@protocol BuyHomeDelegate : NSObject // optional 中定义的方法是可选择性的实现
@optional // required 中定义的方法必须实现
@required
- (double)homePrice;
- (double)homeSize; @end
person+medium类 (以下代码,改变了细节性的地方,用粗体标识,目的是不依赖具体某一个代理,而是接受我的协议,便可做我的代理)
#import <Foundation/Foundation.h>
#import "Medium"
#import "BuyHomeDelegate" @interface Person : NSObject @property(nonatomic,retain) id<BuyHomeDelegate> delegate;
// 买房
- (void)buyHome; @end @implementation Person - (void)buyHome
{
double price = [_delegate homePrice];
double size = [_delegate homeSize];
NSLog(@"房屋中介反馈: 房子价格:%f 房屋面积:%f",price,size);
} - (void)dealloc
{
// 成员变量用到retain关键字,必须在dealloc中销毁一次,这块不详细讲内存管理。
[_delegate replease];
[super dealloc];
} @end #import <Foundation/Foundation.h>
#import "BuyHomeDelegate"
@interface Medium : NSObject <BuyHomeDelegate> // 房子的价格
- (double)homeCost; // 房子大小
- (double)homeSize; @end @implementation Medium // 房子的价格
- (double)homeCost;
{
return ;
} // 房子大小
- (double)homeSize
{
return ;
} @end #import <Fundation/Foundation.h>
#import "Person"
#import "Medium" int main(int argv,const char* argc[])
{ @autoreleasepool
{
Person *person = [[[Person alloc]init]autorelease];
Medium *medium = [[[Medium alloc]init]autorelease]; // person获取中介的实例对象
person.delegate = medium; // 中介提供房子的详细情况
[person buyHome];
}
return ;
}
流程图:(以下流程图是一个完整买房流程)

补充一点:以上代码纯手工打造,无污染绿色环保,可能会有小问题,需要调试。
总结:第一个简单的代理和第二个真正意义的代理,思想都是相同的,第一个为了说明代理的问题,第二个是在实际开发中运用的,最后也请各位朋友多提问题,以及后续的交流:
IOS代理的更多相关文章
- QF——iOS代理模式
iOS的代理模式: A要完成某个功能,它可以自己完成,但有时出于一些原因,不方便自己完成.这时A可以委托B来帮其完成此功能,即由B代理完成.但是这个功能不是让B随随便便任其完成.此时,会有一个协议文件 ...
- iOS代理模式
iOS代理模式的简单理解:当一个对象无法直接获取到另一个对象的指针,又希望对那个变量进行一些操作时,可以使用代理模式. 代理主要由三部分组成: (1)协议:用来指定代理双方可以做什么,必须做什么. ( ...
- 你真的了解iOS代理设计模式吗?
在项目中我们经常会用到代理的设计模式,这是iOS中一种消息传递的方式,也可以通过这种方式来传递一些参数.这篇文章会涵盖代理的使用技巧和原理,以及代理的内存管理等方面的知识.我会通过这些方面的知识,带大 ...
- iOS 代理反向传值
在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳转到界面B,在界面B的 ...
- 【转】你真的了解iOS代理设计模式吗?
转自:http://www.cocoachina.com/ios/20160317/15696.html 在项目中我们经常会用到代理的设计模式,这是iOS中一种消息传递的方式,也可以通过这种方式来传递 ...
- IOS 代理的简单实现
原文 http://www.cnblogs.com/lovekarri/archive/2012/03/04/2379197.html 昨天做了一个demo,用到了简单代理. delegate是ios ...
- iOS代理模式(delegate)的使用
前言: 代理模式是iOS中非常重要的一个模式,iOS SDK中的系统控件几乎都用到了代理模式.代理模式用来处理事件监听.参数传递功能. 协议创建(Protocol): 可手打如下代码,或者在代码块里面 ...
- iOS 代理 重定向消息 forwardInvocation
今天简单研究一下iOS的重定向消息forwardInvocation: 首先看看Invocation类: @interface NSInvocation : NSObject { @private _ ...
- iOS 代理设计模式
在项目中经常会用到代理的设计模式,这是iOS中一种消息传递的方式,也可以通过这种方式传递一些参数. 在项目中,刚开始我是用一些代理来传递参数的,但是慢慢觉得代理的代码比较block多,所以就更多的使用 ...
- fiddler 进行Android/IOS代理配置抓包
1.准备:Android+IOS设备 下载:fiddler抓包工具,不是最新版的链接: 链接:https://pan.baidu.com/s/1BaBfu2H4xgpsh1wmkfC8aQ ...
随机推荐
- map的基本操作函数及含义
map的基本操作函数: C++ Maps是一种关联式容器,包含“关键字/值”对 begin() 返回指向map头部的迭代器 clear() ...
- http://www.cnblogs.com/xdp-gacl/p/3622275.html
http://www.cnblogs.com/xdp-gacl/p/3622275.html
- cocos2d-x 卡牌翻牌效果的实现
转自:http://blog.csdn.net/yanghuiliu/article/details/9115833 这个能实现翻牌的action就是CCOrbitCamera. static CCO ...
- mysql查询语句举例
1. 基础数据表 学生成绩表(stuscore): 姓名:name 课程:subject 分数:score 学号:stuid 张三 数学 89 1 张三 语文 80 1 张三 英语 70 1 李四 数 ...
- cocos2d-x增加控制台程序代码
#include "main.h" #include "AppDelegate.h" #include "CCEGLView.h" USIN ...
- 自定义ContentProvider
ContentProvider作为安卓的四大组件之一,在看开发中用到的频率远不如其他三个,以至于我都把这个东西给忘了,最近由于工作原因,不得不重新拾起来总结一下,那么今天就来说说自定义ContentP ...
- 深入理解计算机系统第二版习题解答CSAPP 2.3
填写空白.单字节可以用两个十六进制数表示. 十进制 二进制 十六进制 0 0000 0000 0x00 167 1010 0111 0xA7 62 0011 1110 0x3E 188 1011 11 ...
- JVM笔记4:Java内存分配策略
简单来说,对象内存分配主要是在堆中分配.但是分配的规则并不是固定的,取决于使用的收集器组合以及JVM内存相关参数的设定 以下介绍几条基本规则(使用的ParNew+Serial Old收集器组合): 一 ...
- .Net Framework 各个版本新特性总结 (一)
.Net Framework 4.5 新特性 最近面试时又看到有问.Net Framework 新特性的问题,一时被问到了.平时也是拿起来就用,新版本出来了,新特性也就是瞄一眼,也没去仔细查看.这次干 ...
- Lucene.net常用功能说明
Lucene.net是一个.net下的全文检索类库.配置简单,功能丰富,比较成熟.我在项目中用Lucene.net有一段时间了,这里我把常用一些功能写出来,与大家一起分享. Lucene.net用的是 ...