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简单使用 /***************************************************************** ...
随机推荐
- 19-03【golang】strings包
golang的strings包提供了字符串操作的一系列函数.下面做个简单介绍 函数 用法 备注 Compare(a,b sring) 比较两个字符串 Contains(s, substr stri ...
- JVM学习04:类的文件结构
JVM学习04:类的文件结构 写在前面:本系列分享主要参考资料是 周志明老师的<深入理解Java虚拟机>第二版. 类的文件结构知识要点Xmind梳理
- layer弹出层不居中解决方案(转)
@感谢参考文章 原文内容: 一.问题描述 用layer做操作结果提示时,发现如果页面超出屏幕的高度时,弹出的提示不是屏幕居中,而是在页面高度的中间,如果一个页面的高度比较大,就看不到提示了. 还有一种 ...
- ASP.Net的工作线程与请求队列
当 ASP.NET 接收针对页的请求时,它从线程池中提取一个线程并将请求分配给该线程. 一个普通的(或同步的)页在该请求期间保留线程,从而防止该线程用于处理其他请求.如果一个同步请求成为 I/O bo ...
- 思科模拟器GNS3-2.1.8安装笔记 (适用于版本2.0.3以上的GNS3)
当前现阶段学习经常使用的路由交换设备主要来自于思科.华为和华三三家,这三家的设备操作配置大致类似,却又不尽相同.因为实体设备通常都非常昂贵,所以作为学习,我们通常会使用它们提供的模拟器.华为的模拟器是 ...
- HashTable和HashMap的区别详解(转)
一.HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. HashMap是非线程安全的, ...
- Struts2各个功能详解(2)-输入校验和拦截器
前面知道了struts2的架构图和struts2的自动封装表单参数和数据类型自动转换,今天来学struts2的第三第四个东西,输入校验和拦截器. 一:输入校验 客户端校验进行基本校验,如检验非空字段 ...
- UNIX 系统下退出 git commit 编辑器
如果是 Emacs 编辑器,输入 Ctrl X + Ctrl S(保存),再输入Ctrl X + Ctrl C(退出) 如果是VIM编辑器,输入 ESC + :wq UNIX 系统默认打开的是 Ema ...
- Servlet之过滤器(Filter)
一.概述 Servlet 过滤器是小型的 Web 组件,它们拦截请求和响应,以便查看.提取或以某种方式操作正在客户机和服务器之间交换的数据.这些组件通过一个配置文件来声明,并动态地处理,当在web.x ...
- postman笔记1--postman的安装教程
一.postman插件的安装 第一步:首先在网上下载postman插件的安装包,下载到自己的本地进行解压(如果懒得去下载的同学,可以根据网盘分享的安装包去下载:链接:https://pan.baidu ...