一 protocol的概念
协议是多个类共享的一个方法列表。协议中列出的方法没有相应的实现,计划由其他人来实现(比如你)。协议提供了一种方式,用指定的名称定义一组多少有点相关的方法。协议声明的方法可以选择实现 和必须实现。
二 protocol的作用
1.解耦
2.增加程序的可扩展性
三 protocol的格式
@interface 类名 : 父类 <协议名称1, 协议名称2,…>
@end
协议可以指定方法的实现方式如:
@required:方法必须要实现
@optional:方法可以选择实现
四 protocol 的基本使用方法
1)一个类遵守了协议,它就拥有了协议中所有方法的声明
2)父类遵守了协议,那么子类也会遵守
3)OC中没有多继续,但可以遵守多个协议
4)协议也可以遵守另一个协议
五 protocol 实验用例
例1:综合的例子
// main.m实现代码
#import <Foundation/Foundation.h>
#import "Person.h"
#import "children.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person *per = [Person new];
[per run]; //必须实现的协议方法
children *child = [children new];
[child eat]; //可选实现的协议方法 nsprotocol协议
[child food]; //可选实现的协议方法 food协议
}
return 0;
}
/*************************************************/
下面是food协议
// food.h 协议**
#import <Foundation/Foundation.h>
@protocol food <NSObject>//food协议遵守NSObject协议
@optional
-(void)food; //一个可选择实现的方法
@end
****下面是nsprotocol协议****
/*************************************************/
**nsprotocol.h 协议**
#import <Foundation/Foundation.h>
#import "food.h"
@protocol NSprotocol <food>//遵守food协议,同时也遵守nsobject协议
-(void)run; //默认协议方法是必须要实现的
@optional //选择实现协议
-(void) eat;
@end
下面是person类
#import "Person.h"
@interface children : Person
@end
/*************************************************/
*// Person.m person类**
#import "Person.h"
@implementation Person
-(void)run
{
NSLog(@"这个人正在跑");
}
//-(void) eat; //没有实现这个方法,因为他是可选的
//-(void)food; //它里面包含这个方法,只不过它是可选的
@end
下面是继承person类的children类
#import "children.h"
@implementation children
-(void)eat //children类 也包含协议的声明,所以这里可以实现它
{
NSLog(@"小孩正在吃饭");
}
-(void)food
{
NSLog(@"小孩的食物是牛奶");
}
@end
结构图如下:
运行结果如下: