【Lession 13 OC语言】- protocol

本节目录

 

protocol理解

protocol是协议的意思,可以理解成定义规则,就是你必须跟着我的规则走,否则不是乱套了对吧。

 

protocol案例

我们添加一个Button类,声明一个Button监听的协议,然后用户通过这个协议来实现按钮监听

Button.h

#import <Foundation/Foundation.h>

//声明一个代理,后面才定义
@protocol ButtonDelegate;

@interface Button : NSObject

//按钮的点击方法
-(void)click;

//代理就是监听器,当用户点击时通过代理通知用户
@property(nonatomic,assign)id<ButtonDelegate> delegate;

@end

//按钮代理方法
@protocol ButtonDelegate <NSObject>

//@optional;
-(void)onClick:(Button *)btn;

@end

 

Button.m

#import "Button.h"
@implementation Button

-(void)click{
    //通过代理通知用户点击
    if ([_delegate respondsToSelector:@selector(onClick:)]) {
        [_delegate onClick:self];
    }
}
@end

 

MyButtonListener.h

#import <Foundation/Foundation.h>
#import "Button.h"
@interface MyButtonListener : NSObject<ButtonDelegate>

@end

MyButtonListener.m

#import "MyButtonListener.h"

@implementation MyButtonListener

-(void)onClick:(Button *)btn{
    NSLog(@"MyButtonListener 监听到按钮的点击事件了");
}

@end

 

main.m

#import <Foundation/Foundation.h>
#import "Button.h"
#import "MyButtonListener.h"
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        //声明一个按钮
        Button *btn = [[[Button alloc] init] autorelease];
        
        //声明一个按钮的监听事件,这个监听是遵循了ButtonDelegate协议的
        MyButtonListener *listener = [[[MyButtonListener alloc] init] autorelease];
        
        //给按钮设置监听
        btn.delegate = listener;
        
        [btn click];//模拟屏幕点击
               
      }
    return 0;
}

 

 

 注:

>protocol的声明协议必须遵循<NSObject>协议

>在property中用id<代理>,变量名不用加*

>声明代理方法使用@optional修饰时,表示遵循该代理类可以不实现代理的方法。

 

posted @ 2014-03-18 18:43  Vincent_Guo  阅读(224)  评论(0编辑  收藏  举报