Objective-C中的Protocol

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;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静守晨昏‍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值