概念:是一系列方法的列表,其中声明的方法可以被任意类实现。这种模式称为代理。和JAVA接口不同的是,Protocol可以不用被实现所有的方法。
使用场景:想要监听一些按钮的操作
1声明一个协议
//<>代表实现某个协议
@class Button;
@protocol ButtonDelegate <NSObject>
-(void)onClick:(Button *)btn;
@end
声明一个引用该协议个set方法
@interface Button : OSObject
//delegate就是按钮的监听器
@property (nonaomic,retain) id<ButtonDlegate> delegate;
@end
防止内存泄露
#import "Button.h"
@implementation Button - (void)dealloc{
@implementation Button - (void)dealloc{
[_delegate release];
[super dealloc];
}
- (void)click{
//判断有没有实现这个方法
if([_delegate respondsToSelector:@selector(onClick:)]){
[_delegate onClick:self];
}
}
@end
@end
实现这个协议
@protocol ButtonDelegate;
@interface ButtonLisenter : NSObject <ButtonDelegate>
@end
@import "Button.h"
@implementation ButtonLisenter
- (void)onClick:(Button *)btn{
NSLog(@"这个按钮被点击了%@被点击了",btn);
}
@end
在main方法中调用它测试
#import <Foundation/Foundation.h>
#import "Button.h" #import "ButonLisenter.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
@autoreleasepool {
Button *btn=[[[Button alloc]init] autorelease];
ButonLisenter *listener = [[[ButonLisenter alloc]init]autorelease];
btn.delegate = listener;
[btn click];
}
return 0;
}