在这里我们要走出一个误区,就是代理不是像kvo或kvc一样,代理是一种设计模式它的核心是<协议>。
那它的核心是协议,那么我们下一步就来讲讲协议。
protocol(协议),protocol类似java中的interface,主要是用来定义一套对象之间的通信规则。protocol也是我们设计时常用的一个东西,相对于直接继承的方式,protocol则偏向于组合模式。也可以理解为protocol就是一系列不属于任何类的方法的列表(这句话很重要)。这里还有两个关键字,@required和@optional,一个是必须实现的,一个是可选的。可以根据名字直接判断。
明白了协议概念那么我们下面就通过讲解在oc中怎么使用协议来充分理解这种设计模式。
首先,我们为什么要在.h去创建一个协议呢,这是因为.h里面的东西都是公有的,只要你在头里引入了这个类你就能拿到。这就对应为我们的两个类搭建了一个桥路。如下图:
那创建个完了我们是不是就该考虑这里的协议让谁来用呢,还要考虑的是能做到隔山发命令,我这边能收到命令。
首先第一步是解决让谁来用的问题,让别人来用首先就要让别人拿到协议,所以我就要把这个协议给暴露出去。oc在这里的处理就很巧妙通过一个申明一个属性一样的形式将协议变成属性的类名,这样外面就可以拿到协议了,而且还解决了让协议给谁用的问题。就是在外面通过点语法引入使用对象这样就锁定了使用者。如图将协议创建成属性:
引入协议:
确定协议的使用权:
使用协议里的方法: