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是按钮的监听器 @property(nonatomic,retain) id<ButtonDelegate> delegate; -(void)Click; @end
在Button.m文件里
#import "Button.h"
@implementation Button
//-(void)dealloc{
// [super dealloc];
//}
-(void)Click{
NSLog(@"Click按钮被点击了。。。");
//如果有onClick:的方法则调用此方法
if ([_delegate respondsToSelector:@selector(onClick:)]) {
//并且告诉监听器哪个按钮被点击了
[_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;
}
Objective-C中的Protocol,布布扣,bubuko.com
原文地址:http://blog.csdn.net/jingjingxujiayou/article/details/37610239