zoukankan      html  css  js  c++  java
  • 四、Protocol 类似java的接口

    概念:是一系列方法的列表,其中声明的方法可以被任意类实现。这种模式称为代理。和JAVA接口不同的是,Protocol可以不用被实现所有的方法。

    使用场景:想要监听一些按钮的操作

    1声明一个协议

    //<>代表实现某个协议

    @class Button;

    @protocol ButtonDelegate <NSObject>

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

    @end

    声明一个引用该协议个set方法

    @interface Button : OSObject

    //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;
    }
  • 相关阅读:
    Nuget:aliyun-openapi-sdk
    iptables简述
    openOffice安装
    bash:command not found
    linux nc命令
    linux命令帮助
    linux用户管理
    LDAP 后缀操作
    LDAP缓存命令
    LDAP索引及缓存优化
  • 原文地址:https://www.cnblogs.com/hqr9313/p/3515293.html
Copyright © 2011-2022 走看看