@protocol使用讲解
Xcode6.0中新建Protocol文件的方法:
0)说明
1>只要一个类遵守了某一份协议,就能拥有这份协议中的所有方法声明。
“:”继承父类
“<>”遵守协议
2>一个类遵守了某个协议就必须实现这个协议的所有方法,否则会有警告产生。
3>协议既可以单独一个文件写协议,也可把协议直接写到某个类的声明文件中;如果一份协议只是某个类会用到,那就把这个协议写到这个类的.h文件中。如果一份协议被很多类用到就把这个协议单独写到一个文件中。
1)基本用途
可以用来声明一大堆方法(不能声明成员变量)
只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明
只要父类遵守了某个协议,就相当于子类也遵守了
2)格式
协议的编写
@protocol 协议名称 <NSObject> //<NSObject>可加可不加,最好加上使自定义的协议遵守该基本协议。
// 方法声明列表
@end
某个类遵守协议
@interface 类名 : 父类 <协议名称>
@end
3)关键字
协议中有2个关键字可以控制方法是否要实现(默认是@required),在大多数情况下,用途在于程序员之间的交流
@required:这个方法必须要实现(若不实现,编译器会发出警告)
@optional:这个方法不一定要实现
4)协议遵守协议
一个1协议可以遵守其他多个协议,多个协议之间用逗号 , 隔开
一个协议遵守了其他协议,就相当于拥有了其他协议中的方法声明
@protocol 协议名称 <协议1, 协议2>
@end
5)基协议
NSObject是一个基类,最根本最基本的类,任何其他类最终都要继承它
其实还有一个协议,名字也叫NSObject,它是一个基协议,最根本最基本的协议
NSObject协议中声明很多最基本的方法,比如description、retain、release等
建议每个新的协议都要遵守NSObject协议
6)定义变量时指定协议
格式:
类名<协议名称> *变量名;
// NSObject类型的对象,并且要遵守NSCopying协议
NSObject<NSCopying> *obj;
// 任何OC对象,并且要遵守NSCoding协议
id<NSCoding> obj2; //注意id类型的变量不需要加*号
7)在类的.h文件中声明引入协议时,可以使用如下两种形式:
1)@protocol Myprotocol; //使用这种编译效率会高一些,但要在.m文件中使用#import导入该protocol文件。
2)#import"Myprotocol.h"
8)@property中声明的属性也可以做一个遵守协议的限制。
@property (nonatomic, strong) 类名<协议名> *属性名;
@property (nonatomic,strong) id<协议名> 属性名;