1. 协议的基本使用.
协议: protocol.
协议: 是专门用来写方法的声明的. 协议中不能写属性.
遵守了协议的类. 这个类就拥有了这份协议中的所有的方法声明. 而不用自己去定义.
2. 声明1个协议.
@protocol 协议名称 <NSObject>
方法的声明
@end
新建1个协议的步骤:
协议中不能写属性.
可以写方法的声明.
也可以写@property,但是协议中的@property只会生成getter setter的声明.
3. 类遵守协议.
如果1个类想要拥有某个协议中的所有方法的声明.就只需要遵守这个协议就可以了.
遵守协议的格式.
@interface 类名 : 父类名 <协议名称>
@end
类遵守协议的效果: 这个类咔嚓就有了这个协议中的所有的方法的声明.而不用自己去声明.
: 是继承,
<> 是遵守协议.
类遵守1份协议. 这个类仅仅是有了这份协议中的方法的声明而已. 不会自动实现.
还需要自己傻不拉几的去实现.
如果你遵守了协议,但是没有实现协议中的方法,编译器在编译的时候,不会报错,只是给1个警告.
在执行的时候.如果调用这个协议方法,而这个协议方法没有实现 就会报运行错误.
如果父类遵守了某份协议,就相当于子类也遵守了.
4. 继承是单继承.
协议是可以多遵守的.
@interface 类名 : 父类名 <协议名1,协议名2,.......>
@end
如果1个类遵守了多份协议.那么这个类就相当于拥有了所有协议中的方法声明.
类的声明中 可以声明 多个名称相同的方法. 但是他只认为有1个.
类的实现中,不能有多个名称相同的方法.
5. @required与@optional
当1个类遵守1份协议之后.就相当于这个类拥有了这份协议中的所有的方法的声明啊!.
但是,仅仅是拥有这个协议中的方法的声明. 还要自己去实现.
这两个关键字是用来修饰协议中的方法的.
被@required修饰的方法,如果遵守这个协议的类不去实现的话,编译器就会报警告.
被@optional修饰的方法,如果遵守这个协议的类不去实现的话,编译器连警告都不会报.
无论是@required还是@optional 遵守协议的类如果不实现的话,编译器都不会报错.
如果是@required 不实现的话 就给1个警告.
如果是@optional 不实现的话 警告都没有
唯一的作用: 在于程序员之间的沟通.
我写1份协议 你来遵守.
如果方法必须要实现.那么使用要@required.
如果方法可以实现也可以不实现,那就使用@optional.
如果我们没有为协议的方法写修饰符,那么默认就是@required, |