------- IOS培训、android培训、期待与您交流! ----------
protocol用来声明一大堆方法,(但是不声明成员变量)
只要某一个类遵守了这个协议,那么这个类就拥有了协议里的所有的方法。
协议protocol与分类一样不能声明属性,但是不同的是分类是给某个类扩展一些方法,但是只要一个类遵守了协议protocol就可以拥有协议中的所有的方法,
遵守协议的方式是用<>如下:
@interface Person : NSObject <Myprotocol>
这两个关键字主要用来程序员之间的交流,告诉别人哪些方法是必须是实现的。
@protocol Myprotocol
//@required关键字声明的方法要求必须实现,没有实现就会出现警告
@required
- (void)test;
//可以选择实现的方法
@optional
- (void)test2;
@end
如果一个类的父类遵守了协议,那么这个类也遵守了协议。
一个类虽然只能是单继承,但是一个类可以遵守多个协议如下
@interface Person : NSObject <Myprotocol,protocol2>
协议遵守协议
一个协议可以遵守多个其他协议,协议之间用逗号隔开
一个协议遵守了其他协议,就相当于拥有其他协议中声明的方法
@protocol 协议 <协议1,协议2>
基协议是一个基类,所有的其它的类都遵守这个类。其实还有一个协议,叫做NSobject,它是一个基协议,最根本的基协议。
NSobject协议中声明了很多最基本的方法,如-description,retain,release等
建议每一个协议都遵守基协议
协议使用的主要场合:代理模式和观察者模式
也可以使用protocol协议限制对象类型
如
NSobject<Myprotocol> * obj;
这样限制了只能是遵守Myprotocol协议的对象才能赋值给obj指针。
协议也可以像类一样声明使用@protocol myProtocol ,但是在要在.M文件中#import协议的头文件。
协议也可以不单独定义在一个单独的文件里,可以和某一个类的头文件中一块定义。当只有一个类才遵守某一个协议的时候,这时候这个协议和类的头文件放在一块 。当一个协议需要多个类去遵守的时候,才将协议声明在一个单独的文件里。