A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Edware 中级黑马   /  2015-8-16 13:30  /  320 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1. Protocol翻译过来, 叫做”协议”
     protocol它可以声明一些必须实现的方法和选择实现的方法。这个和java是完全不同的

Protocol的作用
用来声明一些方法
也就说, 一个Protocol是由一系列的方法声明组成的
格式
@protocol 协议名称
// 方法声明列表
@end

类遵守协议
一个类可以遵守1个或多个协议
任何类只要遵守了Protocol,就相当于拥有了Protocol的所有方法声明
@interface 类名 : 父类<协议名称1, 协议名称2,…>
@end

示例

@protocolSportProtocol<NSObject>
- (void)playFootball;
- (void)playBasketball;
@end

#import "SportProtocol.h" // 导入协议
@interface Studnet : NSObject<SportProtocol> // 遵守协议
@end

@implementation Student
// 实现协议方法
- (void)playBasketball
{
NSLog(@"%s", __func__);
}
// 实现协议方法
- (void)playFootball
{
NSLog(@"%s", __func__);
}
@end

2.protocol 的使用注意
- 1)Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现。

@protocolSportProtocol<NSObject>
{
int _age; // 错误写法
}
- (void)playFootball;
- (void)playBasketball;
@end

2)只要父类遵守了某个协议,那么子类也遵守。

@protocolSportProtocol<NSObject>

- (void)playFootball;
- (void)playBasketball;
@end

#import "SportProtocol.h"
@interface Student : NSObject<SportProtocol>
@end

@interfaceGoodStudent : Student
@end

@implementationGoodStudent
- (void)playFootball
{
NSLog(@"%s", __func__);
}
- (void)playBasketball
{
NSLog(@"%s", __func__);
}
@end

3)OC不能继承多个类(单继承)但是能够遵守多个协议。继承(:),遵守协议(<>)

#import "SportProtocol.h"
#import "StudyProtocol.h"

@interface Student : NSObject<SportProtocol, StudyProtocol>

@end

4)协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中的方法声明

@protocol A
-(void)methodA;
@end

@protocol B <A>
-(void)methodB;
@end

@interface Student : NSObject<B>
-(void)methodA; // 同时拥有A/B协议中的方法声明
-(void)methodB;
@end

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马