OC协议、代理的简单使用
在不同类之间传递数据,我所学到的有三种,1.代理,2.block,3.通知。在这里,我们先来讲一下代理的使用,后面我会继续讲到block和通知。代理通常和协议是一起使用的,协议通常写在代理类里面,被代理的类要服从协议。
根据我的理解,在这种情况下:一个类里面的数据需要在另一个类里面实现改变,具体一点:在一个手机程序里面,一个界面的数据在另外一个界面中实现改变,然后再回调给这个界面,使这个界面的数据也发生改变,这时就会用到代理。
首先,来了解一下协议的使用,首先创建一个command Line Tool工程,创建完成后是这样的:

在协议这个类中我们只需要申明方法,不用实现,方法的实现应该在服从这个协议的类里面,协议里面的方法的种类分两种,即required和optional,用required修饰的方法在服从这个协议的类里面必须实现,而用optional修饰的方法可以不实现,现在我们来创建一个专门定义协议的类名为Test,

在这个类里面定义一套协议,如下:

自己定义的协议也要服从上一级协议NSObject协议,在协议里面我定义了一个方法,而且是要求被实现的,接下来我们创建另外一个类名为Person。

在这个类的头文件里面服从我们上面定义的协议,我们要使用这个协议就必须在Person类的头文件里面导入Test.h,

同时,我们在Person.h里面定义一个属性变量名为name,然后在Person.m里面实现我们在协议里面定义的doSomething方法

在main函数里面实现如下代码并运行,


这样我们就完成了整个协议。
接下来,我们来看一下代理的实现方法,在这里,我们先不使用协议,
首先创建一个代理类(这里代理类同时有.h和.m文件),取名为Agent。

再创建一个Person类,作为被代理的类。

在这里既然有两个类,我们就可以将他们假设为两个独立的对象,一个为介绍租房子的中介(代理类),一个是在外打拼需要租房子的人(Person类)。
根据现实中的情况,完成租房子这件事情,第一,要租房子的人(假设租房子的人叫小王,下面直接称为小王)发出租房子这意愿,具体实现如下:租房子首先我们需要找到一个中介,然后告诉中介小王的信息(让中介知道是谁让他租房子),最后中介去找房子。转换成代码如下:
在Person类的头文件里面定义一个方法名为needHouse:,在这里我们可以对中介提一些要求,用参数的形式传递给中介

然后实现这个方法(这里画个重点)

在此时中介类的头文件里面的代码是这样的,实现文件里面还没有代码

第二步,就是中介去租房子并把结果告诉小王,小王希望中介通过电话的形式告诉他,所以就要在Person类里面定义一个联系的方法名为useTellphone(在第二步我们要做的事有两件,1.实现中介的rentHouse方法,2.通过useTellphone方法把结果告诉小王并把结果输出)。
rentHouse方法的实现:

输出结果的实现:

主函数调用needHouse方法并运行:


就这样代理的方法就实现了!
但是如果有很多人都找这个中介租房子,每个人都希望用他们自己常用的联系方式联系他(比如,一个想用电话,另外一个人想用qq,还有人想用邮箱),这样中介就有的忙了,此时,如果由中介来规定联系人的方式,租房子的人必须使用这种方法,就方便了许多。
我们可以用协议的方法解决上面的问题,我们只要在代理类里面定义一个协议,在协议里面写明联系的方式(比如都使用电话),要求在他这里租房子的人必须遵守这个协议就可以了;
综合上面的讲的,可以尝试把整个代理完成,我会在下一篇的开始附上代理的所有代码。
OC协议、代理的简单使用的更多相关文章
- OC基础 代理和协议
OC基础 代理和协议 1.协议 (1)oc语言中得协议:一组方法列表,不需要我们自己实现,由遵守协议的类来实现协议所定制的方法. (2)协议的使用步骤:制定协议-->遵守协议-->实现协议 ...
- Swift协议+代理
Swift语言开发中使用协议+代理的用法和oc中是一样的,只不过变得是语法.现在就进入swift的协议+代理. 先上个图,看看我们要实现的效果: 首先是第一个页面,然后点击到第二个页面,最后点击返回 ...
- OC 协议
OC 协议 概念:定义了一个接口,其他类负责来实现这些接口.如果你的类实现了一个协议的方法时,则说该类遵循此协议. 非正式协议:非正式协议虽名为协议,但实际上是挂于NSObject上的未实现分类(Un ...
- 利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值
实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个 值传递给B类中得某个值(所以需要在B类中先准备一个变量 ...
- java代理通俗简单解析
1 代理 1.1 代理的概念和作用 代理的概念很好理解,就像黄牛代替票务公司给你提供票,经纪人代理艺人和别人谈合作.Java的代理是指实现类作为代理类的属性对象, ...
- iOS开发总结——协议代理的认识
1.前言 自今年5月底正式转iOS之后,天天get新技能,很多技能在脑子里回旋不吐不快,所以,写点东西整理一下.先从协议代理开始. 2.协议方法的声明 @protocol EventMenuBarDe ...
- Nginx(http协议代理 搭建虚拟主机 服务的反向代理 在反向代理中配置集群的负载均衡)
Nginx 简介 Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务.Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点(俄文:Рамблер)开 ...
- Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型
Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...
- iOS开发——高级UI之OC篇&UIdatePicker&UIPickerView简单使用
UIdatePicker&UIPickerView简单使用 /***************************************************************** ...
随机推荐
- Windows 窗体
Windows系统,顾名思义,就是窗口系统,每一个程序都可以用窗口来展示,所以,为了展示窗口,需要多做一系列的工作,当然,也有纯控制台应用,就不用附带窗口了. 首先就是窗口程序的入口地址,与传统的in ...
- POJ-2236.WireleseNetwork.(并查集)
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 43199 Accepted: 178 ...
- UILabel设置富文本后不显示省略号
先描述一下问题,项目中用到了UILabel去显示一段富文本文字,超过label显示区域部分,省略号处理. 但是当设置好 attributedText 给label之后,显示出的效果是文字被切割了,并没 ...
- GOF23设计模式
单例设计模式 饿汉式:
- python 标准库 glob ,python glob 学习
glob库是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用 windows 下的文件搜索差不多.查找文件只用到三个匹配符: ”*”, 匹配 个或多个字符: “?”, ”?” ...
- 定时执行自动化脚本-(一)导入保存jmeter参数至文件的jar包
1.先完成jmeter脚本编写,具体怎么写此处不再详述,可以参考其他文档. 2.有时你会发现jmeter脚本执行后,有些响应信息你需要提取到文件中,以便后续使用: 怎么实现呢?个人思路就是,先写个ja ...
- docker log driver
驱动程序 描述 none 容器没有日志可用,docker logs 什么都不返回 json-file 日志格式化为 JSON.这是 Docker 默认的日志驱动程序. syslog 将日志消息写入 s ...
- 28. pt-table-sync
前提:得有checksum表 pt-table-sync --replicate=pt.checksum \h=192.168.100.101,P=3306,u=admin,p=admin \h=19 ...
- 由odoo源不稳定想到的,一个非常简单但是有效的方式解决yum源不稳定的问题,实现无限重试
如题,最近在安装odoo 10, 但是官方源的速度是在是不敢恭维,断断续续的. yum 有没有能够无限重试的参数,于是用python写了个死循环,让它无限重试下去 脚本如下: #! /usr/bin/ ...
- 对Python选修课的期望
作为一个之前完全没有接触过任何计算机语言的人我对于Python完完全全是个小白,那么我就以一个菜鸟的角度来谈谈我对这门选修课的期望吧. ...