OC协议、代理的简单使用

时间:2022-11-01 02:18:58

  在不同类之间传递数据,我所学到的有三种,1.代理,2.block,3.通知。在这里,我们先来讲一下代理的使用,后面我会继续讲到block和通知。代理通常和协议是一起使用的,协议通常写在代理类里面,被代理的类要服从协议。

  根据我的理解,在这种情况下:一个类里面的数据需要在另一个类里面实现改变,具体一点:在一个手机程序里面,一个界面的数据在另外一个界面中实现改变,然后再回调给这个界面,使这个界面的数据也发生改变,这时就会用到代理。

  首先,来了解一下协议的使用,首先创建一个command Line Tool工程,创建完成后是这样的:

OC协议、代理的简单使用

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

OC协议、代理的简单使用

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

OC协议、代理的简单使用

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

OC协议、代理的简单使用

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

OC协议、代理的简单使用

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

OC协议、代理的简单使用

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

OC协议、代理的简单使用

OC协议、代理的简单使用

  这样我们就完成了整个协议。

  接下来,我们来看一下代理的实现方法,在这里,我们先不使用协议,

首先创建一个代理类(这里代理类同时有.h和.m文件),取名为Agent。

OC协议、代理的简单使用

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

OC协议、代理的简单使用

  在这里既然有两个类,我们就可以将他们假设为两个独立的对象,一个为介绍租房子的中介(代理类),一个是在外打拼需要租房子的人(Person类)。

根据现实中的情况,完成租房子这件事情,第一,要租房子的人(假设租房子的人叫小王,下面直接称为小王)发出租房子这意愿,具体实现如下:租房子首先我们需要找到一个中介,然后告诉中介小王的信息(让中介知道是谁让他租房子),最后中介去找房子。转换成代码如下:

在Person类的头文件里面定义一个方法名为needHouse:,在这里我们可以对中介提一些要求,用参数的形式传递给中介

OC协议、代理的简单使用

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

OC协议、代理的简单使用

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

OC协议、代理的简单使用

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

rentHouse方法的实现:

OC协议、代理的简单使用

输出结果的实现:

OC协议、代理的简单使用

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

OC协议、代理的简单使用

OC协议、代理的简单使用

  就这样代理的方法就实现了!

   但是如果有很多人都找这个中介租房子,每个人都希望用他们自己常用的联系方式联系他(比如,一个想用电话,另外一个人想用qq,还有人想用邮箱),这样中介就有的忙了,此时,如果由中介来规定联系人的方式,租房子的人必须使用这种方法,就方便了许多。

  我们可以用协议的方法解决上面的问题,我们只要在代理类里面定义一个协议,在协议里面写明联系的方式(比如都使用电话),要求在他这里租房子的人必须遵守这个协议就可以了;

  综合上面的讲的,可以尝试把整个代理完成,我会在下一篇的开始附上代理的所有代码。