首页 > 其他 > 详细

Objective-C中的Protocol

时间:2014-07-10 21:24:04      阅读:398      评论:0      收藏:0      [点我收藏+]

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

Objective-C中的Protocol

原文:http://blog.csdn.net/jingjingxujiayou/article/details/37610239

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!