Protocol(协议)类似于C#/java中的接口,可以声明方法,与java不同的是实现类可以只实现一部分方法。在OC中的潜规则是协议名都是“Xxxelegate”。 OC的最根本协议叫NSObject,定义一个协议需要实现这个根本协议,实现协议用尖括号表示,以一个按钮点击监听器做例子: //Button.h #import <Foundation/Foundation.h> //为了让协议用Button做参数,声明这个类 @class Button; //定义一个协议,实现基础协议,以Delegate结尾 @protocol ButtonDelegate <NSObject> //定义协议的点击方法,顺便把触发的按钮传进来 -(void)onClick:(Button *)btn; @end //定义一个按钮类 @interface Button : NSObject //定义一个遵循协议的delegate属性,遵循协议用尖括号表示 //相当于在java当中定义一个接口类型的属性 @property (nonatomic, retain) id<ButtonDelegate> delegate; //按钮有一个模拟的点击方法,用于触发协议中的onClick -(void)click; @end //Buttom.m //导入按钮的头文件 #import "Button.h" //按钮的实现 @implementation Button //为防止内存泄露需要先释放协议 -(void)dealloc{ [_delegate release]; [super dealloc]; } //按钮点击的模拟方法 -(void)click{ //OC语法:判断代理有没有实现onClick:方法 if ([_delegate respondsToSelector:@selector(onClick:)]){ //调用协议当中的方法,并把sender传进去 [_delegate onClick:self]; } } @end //Buttom.m //导入按钮的头文件 #import "Button.h" //按钮的实现 @implementation Button //为防止内存泄露需要先释放协议 -(void)dealloc{ [_delegate release]; [super dealloc]; }
|