类似于java中的interface接口类,没有含有抽象方法,让实现它的类,必须实现其中的方法
OC中的协议(protocol):
1 1)Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现 2 2)只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明 3 3)只要父类遵守了某个协议,那么子类也遵守 4 4)Protocol声明的方法可以让任何类去实现,protocol就是协议 5 5)OC不能继承多个类(单继承)但是能够遵守多个协议,继承(:),遵守协议(<>) 6 6)基协议:<NSObject>基协议,是最根本最基本的协议,其中声明了很多最基本的方法 7 7)协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一个协议中的方法声明
protocol的使用流程
协议的使用流程: 定义协议--->在类中采用指定的协议--->实现协议中的方法(注意方法有必须实现和选择实现两种) 定义协议: @protocol 协议名称<NSObject> //方法声明列表 @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<NSObject> 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 <MyProtocol> person; 7 //标示传入的对象 必须实现了指定的协议 8 9 2.对象赋值时类型限制 10 使用类也同样如此 11 格式: 类名<协议名称> *变量名 12 NSObject <Myprotocol> *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 <workProtocol> 7 //这里会报一个Cannot find protocol的警告,可以不用理会 8 9 @end 10 11 要实现的时候在.m文件中 12 #import "workProtocol.h" 13 14 引入2: 15 也可以在类的.h文件中直接引入带实现 16 @protocol runProtocol <NSObject> 17 -(void) run; 18 @end 19