Protocol 协议
来源:互联网 发布:云计算第三版刘鹏答案 编辑:程序博客网 时间:2024/06/05 01:22
protocol基本概念
- 类似于java的接口interface,接口就是一堆方法的声明,没有实现,而在OC中interface是一个类的头文件的声明,并不是真正意义上的接口的意思,在OC中接口是由一个叫做协议的protocol来实现
- protocol它可以声明一些必须实现的方法
- protocol由一系列的方法声明组成
protocol 语法格式
- protocol的定义
@protocol 协议名称//方法声明@end
- 类遵守协议
- 一个类可以遵循1个或多个协议
- 任何类只要遵循了protocol就相当于拥有了protocol的所有的方法声明
@interface 类名:父类<协议1、协议2...>@end
protocol 和继承区别
- 继承之后默认就有实现,而protocol只要声明没有实现
- 相同类型的类可以使用继承,但是不同类型的类只能使用protocol
- protocol可以用于存储方法声明,可以将多个类中共有的方法抽取出来,以后让这些类遵守协议即可
protocol注意事项
协议只能声明方法,不能声明属性
#import <Foundation/Foundation.h>//协议声明@protocol SportProtocol <NSObject>//方法声明-(void)playFootball;@end ******************************#import <Foundation/Foundation.h> #import "SportProtocol.h"// //遵守协议@interface Student : NSObject<SportProtocol>@end ******************************#import "Student.h"@implementation Student-(void)playFootball{NSLog(@"%s",__func__);}@end ******************************#import "Student.h"@implementation Student//协议实现-(void)playFootball{NSLog(@"%s",__func__);}@end
父类遵守了某个类的协议,那么子类也会自动遵守这个协议
#import <Foundation/Foundation.h>@protocol SportProtocol <NSObject>-(void)playFootball;@end ******************************#import <Foundation/Foundation.h>#import "SportProtocol.h"@interface Person : NSObject<SportProtocol>@end ******************************#import "Person.h"@interface Student : Person@end#import "Student.h"@implementation Student-(void)playFootball{ NSLog(@"%s",__func__);}@end
一个类可以遵守多个协议
#import <Foundation/Foundation.h> @protocol SportProtocol <NSObject> -(void)playFootball; @end *************************** #import <Foundation/Foundation.h> @protocol StudyProtocol <NSObject> -(void)studyEnglish; @end *************************** #import <Foundation/Foundation.h> #import "SportProtocol.h" #import "StudyProtocol.h" @interface Person : NSObject<SportProtocol,StudyProtocol> @end *************************** #import "Person.h" @implementation Person -(void)playFootball{ NSLog(@"%s",__func__); } -(void)studyEnglish{ NSLog(@"%s",__func__); } @end
协议又可以遵守其他协议,只要一个协议遵循了其他协议,那么这个协议就会自动包含其他协议的声明
#import <Foundation/Foundation.h>@protocol SportProtocol <NSObject>-(void)playFootball;@end *************************** #import <Foundation/Foundation.h>#improt "SportProtocol.h"@protocol RunProtocl <SportProtocol>-(void)run;@end *************************** #import "Person.h"@implementation Person-(void)playFootball{ NSLog(@"%s",__func__);}-(void)run{ NSLog(@"%s",__func__);}@end
基协议
- NSObject是一个基类,任何其他类都要继承它
- 还有个名字也叫NSObject的协议,它是一个基协议
- NSObject协议中声明最基本的方法
- description
- retain
- release
建议每个新协议都遵循NSObject
#import <Foundation/Foundation.h>@protocol StudyProtocol <NSObject>-(void)studyEnglish;@end
@required 和 @optional关键字
- @required:这个方法必须实现,默认就是required(若不实现,编译会报错)
@optional:这个方法不一定要实现
#import <Foundation/Foundation.h>@protocol StudyProtocol <NSObject>@required//必须实现-(void)studyChinese;@optional//不一定要实现-(void)studyEnglish;@end
0 0
- protocol协议
- Protocol 协议
- Protocol 协议
- protocol 协议
- @protocol协议
- protocol 协议
- 协议Protocol
- 协议Protocol
- 协议(protocol)
- 协议(protocol)
- protocol - 协议
- 协议 protocol
- Protocol 协议
- Protocol协议
- @protocol 协议名 <其它协议,。。>
- Google SiteMap Protocol协议
- Object-C 协议 Protocol
- Object-C 协议 Protocol
- Java中设计模式之装饰者模式-2
- [树分块] 1086: [SCOI2005]王室联邦
- 继续前进之SpringMvc入门小程序
- windows logstash cannot find log4j2.properties file
- python中的私有变量
- Protocol 协议
- Oracle数据库中字符串相关字段类型辨析
- call,apply与bind方法的区别
- 53.性能调优之使用 fastutil 优化数据格式
- 线程池ThreadPoolExecutor使用
- http状态码
- Java反射机制
- nslookup 使用方法简介
- linux用rpm命令安装jdk