协议Protocol使用
1.协议定义
通常,一个协议的定义放在头文件中,其语法形式如下:
@protocol 协议名
方法声明;
@end
一般在方法声明前面会有两个关键字进行修饰:
@optional,它表示声明的方法是可选的,
@required,它表示声明的方法是必选的,
加上关键字的协议定义如下:
@protocol 协议名
@optional
方法声明1;
方法声明2;
@required
方法声明3;
方法声明4;
@end
注意:一般方法前面没有关键字修饰的,默认为@required.
2.协议在类中的声明
协议定义好后,要在类中进行使用。首先要在类中进行协议的声明,其语法形式如下:
@interface 类名:父类名<协议名>
@end
3.实现
协议声明好后,要在类的实现文件中实现协议中声明的方法,其语法形式如下:
@implementation 类名
协议方法名 {
代码段;
}
@end
示例代码:
MyProtocol协议头文件:
#import <Foundation/Foundation.h> @protocol MyProtocol <NSObject> -(void) go; @end
Aaa类头文件:
#import <Foundation/Foundation.h> #import "MyProtocol.h" @interface Aaa : NSObject<MyProtocol> @end
Aaa类实现文件:
#import "Aaa.h" @implementation Aaa -(void)go{ NSLog(@"GO"); } @end
Main函数文件:
#import <Foundation/Foundation.h> #import "Aaa.h" int main(int argc, const char * argv[]) { @autoreleasepool { Aaa *aa = [[Aaa alloc]init]; [aa go]; } return 0; }
执行结果如下:
注意:在此程序中,用到了协议继承,即协议2使用了协议1,其语法形式如下:
@protocol 协议名2<协议名1>
方法声明;
@end
在Object-C中,创建的协议都默认继承自NSObject协议,其语法形式如下:
@protocol 协议名<NSObject>
方法声明;
@end
协议可以多继承,即继承多个协议,其语法形式如下:
@protocol 协议名<协议名1,协议名2,协议名3>
@end;
类使用协议时,也可以同时使用多个协议,其语法形式如下:
@interface 类名:父类名<协议名1,协议名2,协议名3>
@end