4、Protocol 相似java的接口

概念:是一系列方法的列表,其中聲明的方法能夠被任意類實現。這種模式稱爲代理。和JAVA接口不一樣的是,Protocol能夠不用被實現全部的方法。測試

使用場景:想要監聽一些按鈕的操做代理

 

1聲明一個協議接口

//<>表明實現某個協議內存

@class Button;it

@protocol ButtonDelegate <NSObject>io

-(void)onClick:(Button *)btn;class

@endimport

 

聲明一個引用該協議個set方法cli

@interface Button : OSObjectselect

//delegate就是按鈕的監聽器

@property (nonaomic,retain) id<ButtonDlegate> delegate;

@end

 

防止內存泄露

#import "Button.h"
@implementation Button - (void)dealloc{    
 [_delegate release];    
 [super dealloc];
}
 
- (void)click{   
  //判斷有沒有實現這個方法   
  if([_delegate respondsToSelector:@selector(onClick:)]){        
 [_delegate onClick:self];    
 }
}
@end

 

 

 

實現這個協議

@protocol ButtonDelegate;

@interface ButtonLisenter : NSObject <ButtonDelegate>
@end

 

@import "Button.h"

@implementation ButtonLisenter

-  (void)onClick:(Button *)btn{

  NSLog(@"這個按鈕被點擊了%@被點擊了",btn);

}

@end

 

在main方法中調用它測試

#import <Foundation/Foundation.h>
#import "Button.h" #import "ButonLisenter.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {        
  Button *btn=[[[Button alloc]init] autorelease];        
  ButonLisenter *listener = [[[ButonLisenter alloc]init]autorelease];      
  btn.delegate = listener;       
  [btn click];                      
   }     
  return 0;
}
相關文章
相關標籤/搜索