设为首页 加入收藏

TOP

Objective-C中的Protocol
2015-01-22 21:13:31 来源: 作者: 【 】 浏览:17
Tags:Objective-C Protocol

Objective-C中的Protocol

Protocol

简单来说就是一系列方法的列表,其中声明的方法可以被任何类实现,这种模式一般称为(delegation)模式

在iOS中和OS X中,Apple采用了大量的代理模式来实现MVC中的View(UI控件)和Controller(控制器)


下面举个例子


声明一个Button类和Buttonlisterner类

在Button.h文件里


#import 
  
   

//类声明
@class Button;

//<>代表实现某个协议,NSObject为做根本的协议
//ButtonDelegate为协议的名称
@protocol ButtonDelegate
   
     -(void)onClick:(Button*)but; @end @interface Button : NSObject //nonatomic不需要多线程管理,delegate是按钮的监听器 @property(nonatomic,retain) id
    
      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 
  
   
#import "Button.h"


//对协议提前声明,跟@class的作用是一样的

@protocol ButtonDelegate;

@interface Buttonlisterner : NSObject
   
     @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;
}



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言必掌握知识点 下一篇C语言快速入门系列(四)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: