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简单使用 /***************************************************************** ...
随机推荐
- echarts简单的折线图
加jar包 <script src="<%=path %>/js/echarts.min.js"></script> 首先 在jsp页面中 选好 ...
- Vue父子组件生命过程
加载渲染过程 父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount-& ...
- innodb 体系结构(后台进程)
一.后台进程(innodb 1.0.x以前的) 1.master thread master thread具有最高的线程优先级别,其内部由多个循环(loop)组成:主循环(loop).后台循环(bac ...
- paloalto防火墙注册
一.创建账户 1.注册网站: https://support.paloaltonetworks.com/Support/Index 2.单击 Activate My Account 3.输入 Your ...
- 【C++】undered_map的用法总结(1)
1.介绍 unordered_map是一个关联容器,内部采用的是hash表结构,拥有快速检索的功能. 1.1 特性 关联性:通过key去检索value,而不是通过绝对地址(和顺序容器不同)无序性:使用 ...
- 发布后就很丢人的随笔(c++)
for循环条件中使用的变量 可以是循环条件中定义的变量 也可以是循环之外的变量 代码: #include <iostream> int main(){ int a = 1; int b = ...
- Spring bean的生命流程
Spring 是一个轻量级的 J2EE 开源框架,其目标是降低企业级应用开发难度,提高企业级应用开发效率.在日程开发中,我们会经常使用 Spring 框架去构建应用.所以作为一个经常使用的框架,了解其 ...
- table 的部分使用,固定行,固定列等
主要是用多张table表格实现 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- mac sublime3 无法安装Package Control
一.在线安装 1.打开sublime,Ctrl+` 打开控制台, 输入 import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedc ...
- js中创建对象
https://www.cnblogs.com/starof/p/4162354.html