您的位置:首页 > 移动开发 > IOS开发

protocol

2015-11-02 10:11 459 查看
一 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


结构图如下:



运行结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios