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简单使用 /***************************************************************** ...
随机推荐
- 安装setuptools 报错缺少zlib
# yum install zlib # yum install zlib-devel 下载成功后,进入python2.7的目录,重新执行 #make #make install 此时先前执行的 软连 ...
- leetcode 动态规划类型题
1,Triangle int mininumTotal(vector<vector<int>>& triangle) { ; i >= ; --i) { ; j ...
- mysql学习笔记--数据库预处理
一.概念 1. 预编译一次,可以多次执行.用来解决一条sql语句频繁执行的问题 2. 语法 a. 预处理语句:preapre 预处理名字 from 'sql语句' b. 执行预处理:execute 预 ...
- 第二周博客作业 <西北师范大学| 周安伟>
一,本周助教小结 逐步开始适应助教工作,对学生发布的博客进行点评,查看学生对软件工程前期的准备情况. 二,助教本人博客 https://home.cnblogs.com/u/zaw-315/ 三,学生 ...
- unity插件各领域王者
移动端手势操作 Easy Touch 获取 缓动 iTween 获取 可视化编程 Playmaker1.9.0 获取 UI NGUI,UGUI 获取 Shader着色器可视化编程 AmplifySha ...
- Linux镜像清理日志操作
1.安全 没有其他用户 查看 ll /home下没有其他用户 2.清理日志 rm -rf /root/* rm -rf /tmp/* rm -rf /etc/udev/rules.d/persist ...
- 【Spring学习】Spring的源码解析之路 ——【step1】基础环境配置 + IDEA快捷键整理
前导: 本次主要是关于“基础环境搭建”的内容,分为三个部分,(1)查看源码和项目需要的开发集成环境Intellig IDEA的使用,(2)如何导入源码,(3)在这个过程中梳理出的快捷键 正文:==== ...
- redis常用服务安装部署
常用服务安装部署 学了前面的Linux基础,想必童鞋们是不是更感兴趣了?接下来就学习常用服务部署吧! 安装环境: centos7 + vmware + xshell 即将登场的是: mysql(m ...
- java中实现对list的模糊查询
比如我有下面这样一个List,里面存放的是多个Employee对象.然后我想对这个List进行按照Employee对象的名字进行模糊查询.有什么好的解决方案么?比如我输入的查询条件为“wang”,那么 ...
- 1、背景介绍及移动云MAS平台 --短信平台
目的: 刚开发完成一套短信平台以及一个Web端短信发送系统,短信平台耗时两个周.短信发送系统耗时两个多月,开发使用的技术没什么高科技含量,在此主要是记录下很多情况的处理方案,希望能让大家提出改善方案和 ...