Protocol 协议
2017-04-25 11:43
113 查看
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
相关文章推荐
- 握手协议(Handshake Protocol)
- Objective-C 协议(protocol)
- 协议(Protocol)类比java中的interface
- MINA源码分析---协议编码输出接口ProtocolEncoderOutput及其实现
- 【iOS开发】协议与委托 (Protocol and Delegate) 实例解析(转)
- 黑马程序员——OC学习之协议protocol的使用
- Peer wire protocol (TCP) 基于tcp的那部分协议
- 虚拟路由冗余协议 Virtual Router Redundancy Protocol (VRRP)
- iOS之协议(protocol)的使用
- Protocol 协议总结 - iOS
- NSObject class和NSObject protocol的关系(抽象基类与协议)
- ICMP(Internet Control Message Protocol)/Internet控制消息协议
- 黑马程序员-OC语言协议Protocol
- OC-ARC机制、数据类型block、 protocol协议、Foudation框架
- BitTorrent协议规范(BitTorrent Protocol Specification)之Peer Wire协议(Peer Wire Protocol)-第四部分
- 利用Log parse 分析Exchange 性能并产生相应报表!(1)-Protocol 协议 Log!(2)
- 关于委托delegate和协议protocol的讲解
- object-c学习:协议protocol
- 网络协议分析(Network Protocol Analysis)之点到链路控制协议LCP
- Swift协议(Protocol)