类似于java中的interface接口类,没有含有抽象方法,让实现它的类,必须实现其中的方法
创新互联公司于2013年创立,是专业互联网技术服务公司,拥有项目网站建设、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元临清做网站,已为上家服务,为临清各地企业和个人服务,联系电话:028-86922220OC中的协议(protocol):
1 1)Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现
2 2)只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明
3 3)只要父类遵守了某个协议,那么子类也遵守
4 4)Protocol声明的方法可以让任何类去实现,protocol就是协议
5 5)OC不能继承多个类(单继承)但是能够遵守多个协议,继承(:),遵守协议(<>)
6 6)基协议:基协议,是最根本最基本的协议,其中声明了很多最基本的方法
7 7)协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一个协议中的方法声明
protocol的使用流程
协议的使用流程:
定义协议--->在类中采用指定的协议--->实现协议中的方法(注意方法有必须实现和选择实现两种)
定义协议:
@protocol 协议名称
//方法声明列表 @end;
注意:协议默认的要采纳NSObject的协议
采纳协议:
1)类遵守协议
某个类遵守某个协议
@interface 类名 : 父类 <协议名称>
@end
某个协议遵守某个或者某些协议,一个协议可以遵守其他多个协议,多个协议之间用逗号 , 隔开.
@protocol 协议名称 <其他协议名称1,其他协议名称2>
@end 2) 协议遵守协议
@protocol 协议名称<其他协议名称>
@end;
创建协议
protocol中的@required 和 @optiona 的使用
1 @required和 @optiona是协议方法声明中的两个关键字
2 它们主要用于控制方法是否要实现(默认是@required),在大多数情况下,用途在于程序员之间的交流
3 @required:这个方法必须要实现(若不实现,编译器会发生警告)
4 @optional:这个方法可以选择实现(不实现,编译器不会发生警告)
5 其实没什么价值,因为无论哪个修饰,无论实不实现,IOS是弱语法都不会对运行产生影响
6
7 例:
8 @protocol RunProtocol
9
10 @required
11 -(void)run;
12 @optional
13 -(void)eat;
14 @end
protocol类型限制
1 1.使用id存储对象时,对象的类型限制
2
3 格式; id<协议名称> 变量名
4
5
6 例: @property (nonatomic,strong) id person;
7 //标示传入的对象 必须实现了指定的协议 8
9 2.对象赋值时类型限制
10 使用类也同样如此
11 格式: 类名<协议名称> *变量名
12 NSObject *obj;
13
14 3.对象关联关系下,对象的类型限制
15
protocol代理设计模式
1 代理模式概念:
2 传入的对象,代替当前类完成了某个功能,成为代理模式
3
4 采用协议实现代理模式的主要思路为:
5 1)定义一个协议,里面声明代理类需要实现的方法列表,比如这里一个代理类需要实现meetingNotify与businessTrip方法
6 2)创建一个代理类(比如PersonAssistant,BossAssistant),遵守上面的代理协议
7 3)在需要代理的类中(Person),定义一个对象类型为id 且遵守代理协议的成员变量
8 4)在Person类中调用成员变量_delegate(代理)的方法,调用代理类的方法
9 5)main.m或其他使用Person类的文件中,为Person类的成员变量(代理类)赋值
protocol代理模式应用场合
1 1)监听器的场合
2 2)通知的场合
3 3)有写事情,不想自己处理,想交给别人处理
protocol引用问题
1 @class 代表这是一个类,具体引用在.m文件中 #import 进行导入
2
3 同样 protocol 也可以这样
4 在.h文件中
5 @protocol workProtocol;//告诉编译器这是一个协议 6 @interface Person :NSObject
7 //这里会报一个Cannot find protocol的警告,可以不用理会 8
9 @end
10
11 要实现的时候在.m文件中
12 #import "workProtocol.h"13
14 引入2:
15 也可以在类的.h文件中直接引入带实现
16 @protocol runProtocol
17 -(void) run;
18 @end19