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是button的监听器

@property(nonatomic,retain) id<ButtonDelegate> delegate;

-(void)Click;

@end

在Button.m文件中


#import "Button.h"

@implementation Button

//-(void)dealloc{
//    [super dealloc];
//}

-(void)Click{
    NSLog(@"Clickbutton被点击了。。。

"); //假设有onClick:的方法则调用此方法 if ([_delegate respondsToSelector:@selector(onClick:)]) { //而且告诉监听器哪个button被点击了 [_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;
}



原文地址:https://www.cnblogs.com/bhlsheji/p/4600211.html