协议
1、简介
1.1 协议可以理解为规范,不同的对象遵守相同的规范就可以在规范内去实现相同的功能
1.2 不同的浏览器都能打开同一个网站,并显示出相同的效果,就是因为他们都遵守了解析HTML的规范
2、协议分类
2.1 非正式协议(informal protocol)
查阅官方文档可知,非正式协议就是NSObject或他的子类的分类,这里不作讲解,以后会具体讲解分类
2.2 正式协议
正式协议,即规定了有一些列的方法,可以定义是否必须实现,也可以采用其他的协议
3、协议使用
1、定义
协议使用<>定义,如<NSObject>
协议可以单独定义为一个头文件,即.h文件,也可以在一个类中定义
2、关键字
3、协议方法的限制@protocol 协议名 <父协议>
// 这里是协议方法
@end
@required修饰的协议必须实现,是默认关键字
@optional修饰的协议方法,可选择是否实现
协议只提供方法,不提供具体的实现
代理
1、简介
代理是一种设计模式,主要目的是实现低耦合的设计思想
2、概念
2.1 代理方
2.1.1 实现某个方法或功能的那一方
2.1.2 在正式协议中,只有遵守协议才能成为代理方
2.2 委托方
2.3 协议、代理方、委托方的关系2.2.1 将方法或任务交给代理方实现的那一方
2.2.2 在正式协议中,多将协议定义在委托方
2.3.1 协议是代理方、委托方的限制,作为一种约束双方的方式
2.3.2 协议是代理方、委托方的通道,可以用来传递数据等
3、具体实例
2.3.1 情景
有一个中国买家想买美版苹果电脑,但是不方便,刚好他有朋友在美国,可以帮他代购
2.3.2 具体分析
中国买家:委托方
韩国买家:代理方
约束条件:协议,委托方找代理方办事情,但是办什么事情呢,这就是协议里面的内容,即代购苹果电脑
2.3.3 关键代码
// 单独定义协议的头文件 #import <Foundation/Foundation.h> @protocol Purchase <NSObject> //必须实现 @required - (void)buyComputer; // 可选择是否实现 @optional - (void)cutPrice; @end
// 也可以在委托方定义协议 // @protocol Purchase <NSObject> // @required // - (void)buyComputer; // @optional // - (void)cutPrice; // @end // 委托方 @interface Buyer : NSObject // 只有遵守协议的对象才能成为代理 @property id<Purchase> delegate; // 委托方的方法 - (void)planBuyComputer; @end
// 代理方 // 只有遵守协议才能成为代理 @interface Agent : NSObject <Purchase> @end
// 代理方实现协议方法 - (void)buyComputer { NSLog(@"代购者成功购买了电脑..."); }
// 主函数 // 1.创建对象 Buyer *buyer = [[Buyer alloc] init]; Agent *agent = [[Agent alloc] init]; // 2.设置代理 buyer.delegate = agent; // 3.实现方法 [buyer planBuyComputer];