iOS Protocol 协议

来源:互联网 发布:微商推广软件 编辑:程序博客网 时间:2024/06/03 23:43
Protocol的基本概念
在OC中接口是由一个叫做协议的protocol来实现.他可以声明一些必须实现的方法和选择实现的方法.

protocol的作用
用来声明一些方法,一个protocol是由一系列的方法声明组成的

语法格式
@protocol 协议名称
//方法声明列表
@end
类遵守协议
一个类可以遵守一个或多个协议
任何类只要遵守了protocol,就相当于拥有了protocol的所有方法声明
@interface 类名:父类<协议名称1,协议名称2,...>
@end

protocol和继承的区别
1.继承之后默认就有实现,而protocol只有声明没有实现
2.相同类型的类可以用继承,但是不同类型的类只能使用protocol
3.protocol可以用于存储方法的声明,可以将多个类中共同的方法抽取出来,以后让这些类遵守协议即可.

注意事项
1.只能声明方法,不能声明属性.
2.当父类遵守了一个协议,子类也会继承父类遵守的协议.
3.一个类可以遵守多个协议
4.协议又可以遵守其他协议,只要一个协议遵守了其他协议,这个协议中就会自动包含其他协议的声明.

@required和@optional关键字
协议中有2个关键字可以控制方法是否要实现(默认是@required,在大多数情况下,用途仅在于程序员之间的交流,因为就算不实现也不会报错,只是报警告)
@required:这个方法必须要实现
@optional:这个方法不一定要实现

例如:
@protocol SportProtocol<NSObject>

@required//如果遵守协议的类不实现会报警告
-(void)playFootball;
@optional//如果遵守协议的类不实现不会报警告
-(void)playBasketball;
@end

应用场景
1.protocol类型限制
将协议写在数据类型的右边,明确的标注如果想给该变量赋值,那么该对象必须遵守该协议.(注意,虽然进行了限定,但不意味着这个对象实现了该方法,所以在每次调用对象的协议方法时应该进行一次验证)
if ([self.wife respondsToSelector:@selector(cooking)]){调用cooking方法}
respondsToSelector:@selector(cooking)返回的是bool值.

2.代理设计模式
协议的编写规范:
1.一般情况下, 当前协议属于谁, 我们就将协议定义到谁的头文件中
2.协议的名称一般以它属于的那个类的类名开头, 后面跟上protocol或者delegate
3.协议中的方法名称一般以协议的名称protocol之前的作为开头
4.一般情况下协议中的方法会将触发该协议的对象传递出去
5.一般情况下一个类中的代理属于的名称叫做 delegate
6.当某一个类要成为另外一个类的代理的时候,
一般情况下在.h中用@protocol 协议名称;告诉当前类 这是一个协议.
在.m中用#import真正的导入一个协议的声明
*/

@class Person;

@protocol PersonProtocol <NSObject>

- (void)personFindHourse:(Person *)person;

@end
原创粉丝点击