码迷,mamicode.com
首页 > 其他好文 > 详细

Objective-C中的Protocol

时间:2014-07-10 21:23:44      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:delegate   class      控件   ios   

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

标签:delegate   class      控件   ios   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!