概念:是一系列方法的列表,其中声明的方法可以被任意类实现。这种模式称为代理。和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;
}

四、Protocol 类似java的接口的更多相关文章

  1. Python - python里有类似Java的接口(interface)吗?

    参考 https://stackoverflow.com/questions/2124190/how-do-i-implement-interfaces-in-python https://stack ...

  2. python面向对象进阶 反射 单例模式 以及python实现类似java接口功能

    本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和特性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存 ...

  3. java基础-接口

    浏览以下内容前,请点击并阅读 声明 接口是java语言中的一个引用类型,和类一样,接口可以包含常量,方法签名,默认方法,静态方法和嵌套类型.含有方法主体的只有其中的默认方法和静态方法.接口不能被实例化 ...

  4. java微信接口之五—消息分组群发

    一.微信消息分组群发接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_t ...

  5. C# 获取类似java gettime() 的时间格式

    今天做了一个面向Java的接口,需要做到时间的统一,C#提供了System.DateTime.UtcNow 但是需要自己做下处理,记录一下自己的方法, 留着以后查阅方便. /// <summar ...

  6. Spring Boot入门(四):开发Web Api接口常用注解总结

    本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序员的日常工作中,Web开发应该是占比很重的一部分,至少我工作以来,开发的系统基本都是Web端访问的 ...

  7. java的接口为什么不能实例化

    java的接口为什么不能实例化呢?首先,我们需要明白实例化的含义.实例化实际意义是在jvm的堆中开辟出一块内存空间,比如Student s = new Student();此处声明Student对象s ...

  8. JAVA面向接口的编程思想与具体实现

    面向对象设计里有一点大家已基本形成共识,就是面向接口编程,我想大多数人对这个是没有什么觉得需要怀疑的.        问题是在实际的项目开发中我们是怎么体现的呢? 难道就是每一个实现都提供一个接口就了 ...

  9. Java中接口和抽象类的比較

    Java中接口和抽象类的比較-2013年5月写的读书笔记摘要 1. 概述 接口(Interface)和抽象类(abstract class)是 Java 语言中支持抽象类的两种机制,是Java程序设计 ...

随机推荐

  1. 基于h5的图片无刷新上传(uploadifive)

    基于h5的图片无刷新上传(uploadifive) uploadifive简介 了解uploadify之前,首先了解来一下什么是uploadify,uploadfy官网,uploadify和uploa ...

  2. NPOI导出数据到Excel

    NPOI导出数据到Excel   前言 Asp.net操作Excel已经是老生长谈的事情了,可下面我说的这个NPOI操作Excel,应该是最好的方案了,没有之一,使用NPOI能够帮助开发者在没有安装微 ...

  3. 对抗静态分析——运行时修复dex

    对抗静态分析——运行时修复dex   本文来源:i春秋社区-分享你的技术,为安全加点温度 零.写在前面   这个系列本来题目想写对抗反编译,可是想想对抗反编译的这个范围有点大,总结如下 灵魂作图   ...

  4. SharePoint 门户添加内网域名

    原理:在DNS服务器上,添加一条SharePoint门户所在主机的别名,当我们在浏览器里访问这个别名的时候,会自动到Dns去解析,解析出来这台主机,从而访问到我们的SharePoint门户. 1.打开 ...

  5. 实验12:Problem J: 动物爱好者

    #define null ""是用来将字符串清空的 #define none -1是用来当不存在这种动物时,返回-1. 其实这种做法有点多余,不过好理解一些. Home Web B ...

  6. Linux平台Makefile文件的编写基础入门(课堂作业)

    根据老师的要求,写一个超简单的makefile准备:       准备三个文件:file1.c, file2.c, file2.h       file1.c: #include "file ...

  7. 查看一个软件ipa包的内容

    1.打开itunes     下载你要用的app 把ipa文件拉到桌面上              然后进行压缩

  8. swift基础二

    import Foundation // MARK: - ?和!的区别 // ?代表可选类型,实质上是枚举类型,里面有None和Some两种类型,其实nil相当于OPtional.None,如果非ni ...

  9. 将spring源码导入到eclipse中

    前置条件: 1. 正确安装jdk,并配置好JAVA_HOME.PATH.(我这里安装的是jdk1.8) 2. 正确安装好eclipse.(我的eclipse版本是: Neon Release (4.6 ...

  10. 关于tableView中tableHeaderView/tableFooterView/sectionHeader/sectionFooter/contentInset的理解

    其实每个人的理解有所不同,找到最有利于自己的理解方式即可.有人把Cell,tableHeaderView,tableFooterView,sectionHeader,sectionFooter这些属性 ...