Objective-C该Protocol
Protocol
简单来说就是一系列方法的列表,当中声明的方法能够被不论什么类实现,这样的模式一般称为(delegation)模式
在iOS中和OS X中,Apple採用了大量的代理模式来实现MVC中的View(UI控件)和Controller(控制器)
以下举个样例
声明一个Button类和Buttonlisterner类
在Button.h文件中
#import <Foundation/Foundation.h>
//类声明
@class Button;
//<>代表实现某个协议,NSObject为做根本的协议
//ButtonDelegate为协议的名称
@protocol ButtonDelegate<NSObject>
-(void)onClick:(Button*)but;
@end
@interface Button : NSObject
//nonatomic不须要多线程管理,delegate是button的监听器
@property(nonatomic,retain) id<ButtonDelegate> delegate;
-(void)Click;
@end
在Button.m文件中
#import "Button.h"
@implementation Button
//-(void)dealloc{
// [super dealloc];
//}
-(void)Click{
NSLog(@"Clickbutton被点击了。。。
"); //假设有onClick:的方法则调用此方法 if ([_delegate respondsToSelector:@selector(onClick:)]) { //而且告诉监听器哪个button被点击了 [_delegate onClick:self]; } } @end
在Buttonlisterner.h文件中
#import <Foundation/Foundation.h>
#import "Button.h"
//对协议提前声明。跟@class的作用是一样的
@protocol ButtonDelegate;
@interface Buttonlisterner : NSObject<ButtonDelegate>
@end
在Buttonlisterner.m文件中
#import "Buttonlisterner.h"
#import "Button.h"
@implementation Buttonlisterner
-(void)onClick:(Button *)but
{
NSLog(@"onClick...");
}
@end
在main.m中
int main(int argc, const char * argv[])
{
@autoreleasepool {
Button* button = [[Button alloc]init];
Buttonlisterner* listenter = [[Buttonlisterner alloc]init];
button.delegate=listenter;
[button Click];
}
return 0;
}