Objective-c中的协议
来源:互联网 发布:程序员累吗 编辑:程序博客网 时间:2024/05/17 13:08
Objective-c中的协议是一组没有实现的方法列表,任何的类均可采纳协议并具体实现这组方法。
协议类似于Java的“接口”。在Objective-C中,有两种定义协议的方式:由编译器保证的“正式协议”,以及为特定目的设定的“非正式协议”。
非正式协议为一个可以选择性实现的一系列方法列表。非正式协议虽名为协议,但实际上是挂于NSObject上的未实现分类的一种称谓,Objetive-C语言机制上并没有非正式协议这种东西,OSX 10.6版本之后由于引入@optional关键字,使得正式协议已具备同样的能力,所以非正式协议已经被废弃不再使用。
正式协议类似于Java中的"接口",它是一系列方法的列表,表明了一组功能,任何类都可以声明自身实现了某个协议。在Objective-C 2.0之前,一个类必须实现它声明符合的协议中的所有方法,否则编译器会报告错误。Objective-C 2.0版本允许标记协议中某些方法为可选的(Optional),这样编译器就不会强制实现这些可选的方法。
例如Java中的Runnable接口,其中有一个run函数,任何实现它的类都必须实现run函数。协议也类似,只是协议中的@optional之后的函数是可以选择实现的。
简单示例 :
// 定义协议, @optional后的函数为可选实现。@protocol Visible // 必须实现的两个函数-(void) click ;-(void) touch ;// 可以选择实现@optional-(void) longClick ;@end// 类View, 实现Visible协议@interface View : NSObject <Visible>// 覆写init函数-(id) init ;// 绘制函数-(void) draw ;-(id) initWithWidth : (int) w andHeight:(int) h ;@property (nonatomic) int width, height ;@end// ----------------- view impl -----------------------@implementation View// 覆写init-(id) init{ return [self initWithWidth:0 andHeight:0] ;}// 绘制view-(void) draw{ NSLog(@"draw in view, width = %i, height = %i.", width, height) ;}// 点击-(void) click{ NSLog(@"click the view") ;}// 触摸-(void) touch{ NSLog(@"touch the view") ;}// 初始化, 并且设置初始值-(id) initWithWidth : (int) w andHeight:(int) h{ self = [super init] ; if ( self ) { width = w ; height = h ; } return self ;}@synthesize width, height ;@end上面定义了一个Visiable协议, 该协议中有两个必须实现的函数,即click和touch 。还有一个可以选择实现的函数longClick函数。View类实现了Visiable协议,所以必须实现click和touch函数。
使用 :
View* v = [[View alloc] init] ;[v click] ;
协议的定义格式如下 :
协议以关键字@protocol作为区段起始,@end退出,中间为方法列表。
@protocol Visiable- (void)click;- (void)touch;
@optional
-(void) longClick ;@end
类要实现某个协议的格式 :
@interface 类名 : 父类名 <协议名>
@end
0 0
- Objective-c中的协议
- Objective-C中的协议Protocol
- Objective-C中的协议(procotol,delegate)
- Objective-C中的类别和非正式协议
- Objective-C中的协议使用举例
- Objective-C中的协议使用
- objective-c中的正式协议 protocol
- Objective-C中的类别和非正式协议
- 浅析Objective-C中的Protocol协议
- objective-c中的协议和类别
- Objective-C中的协议与委托
- Objective-C中的类目,延展,协议
- objective-C中的"非正式协议"和“正式协议”
- objective-c协议
- Objective-c 协议(protocol)
- Objective C 协议(Protocol)
- Objective-C 协议详解
- Objective-c之协议
- Android实现自定义view---绘制图片
- 守护线程与非守护线程
- 演示不同隔离级别下的并发问题
- Hopscotch
- Android Dialog点击按钮不关闭,控制窗口的显示和关闭
- Objective-c中的协议
- 黑马程序员-Oracle(第七讲)
- tomcat配置数据源连接(针对单个web应用)
- 内存溢出相关
- inline函数(摘自C++ Primer的第三版)
- 大数据时代带来的技术变革思考(一)大数据的定义
- 南阳139 我是第几个(康托排序)和南阳143 第几是谁(康托逆排序)
- Toj 1230 Magazine Delivery
- 突破python爬虫限制种种