OC中的protocol就是和JAVA中interface差不多的东西,但是又不是完全一样的。这个protocol常用来实现委托,也就是自己不实现,当事件产生的时候去回调委托者。

让委托者去执行响应的动作。

咱们先定义一个Button类来模拟按钮代码如下

Button.h

#import <Foundation/Foundation.h>

@class  Button;

@protocol ButtonEventDelegate <NSObject>

-(void)onClick:(Button*)mButton btn_id:(int)btn_id;

@end

@interface Button : NSObject

@property(nonatomic,assign) id<ButtonEventDelegate> listener;

@property(nonatomic) int btn_id;

-(void)performClick;

+(id)buttonWithId:(int)btn_id listener:(id<ButtonEventDelegate>)listener;

@end

Button.m

#import "Button.h"

@implementation Button

#pragma mark 快速创建一个Button
+(id)buttonWithId:(int)btn_id listener:(id<ButtonEventDelegate>)listener{
Button *btnInstance=nil; if((btnInstance=[[super alloc] init])){
[btnInstance setBtn_id:btn_id];
[btnInstance setListener:listener];
[btnInstance autorelease];
}
return btnInstance;
}
#pragma mark 用来触发点击事件
-(void)performClick{
//判断是否实现了onClick:btn_id:方法
if([[self listener] respondsToSelector:@selector(onClick:btn_id:)]){
NSLog(@"响应了事件");
[[self listener]onClick:self btn_id:[self btn_id]];
}else{
//如果没有实现onClick:btn_id:方法就不执行,这样就更加安全了
NSLog(@"没有响应事件");
}
}
#pragma mark 销毁
-(void)dealloc{
NSLog(@"销毁了Button>>");
[super dealloc];
}
@end

接下来是protocol的实现

@protocol ButtonEventDelegate;

@interface ButtonListener : NSObject <ButtonEventDelegate>

@end

@implementation ButtonListener

-(void)onClick:(Button *)mButton btn_id:(int)btn_id{
NSLog(@"点击了按钮");
}
-(void)dealloc{
NSLog(@"销毁了监听器");
[super dealloc];
}
@end

组装使用

#import <Foundation/Foundation.h>
#import "Button.h"
#import "ButtonListener.h" int main(int argc, const char * argv[])
{
@autoreleasepool {
ButtonListener *listener =[[ButtonListener alloc] init];
Button *mButton =[Button buttonWithId: listener:listener];
//设置监听
[mButton setListener:listener];
//触发事件
[mButton performClick];
//释放listener
[listener release];
//button对象是autorelease的,所以我们不需要去维护
}
return ;
}

  

[OC笔记] protocol之我的见解的更多相关文章

  1. oc中protocol、category和继承的区别

    OC中protocol.category和继承的区别以前还是有点迷糊,面试的时候说的有点混乱,现在结合一些资料总结一下. 利用继承,多态是一个很好的保持"对扩展开放.对更改封闭"( ...

  2. [OC笔记] Category分类之见解

    用过别的语言做过开发的同学都知道,如果你想扩充一个类,就应该去继承这个类.但是OC里面有更好的方法,那就是分类. 那什么是分类呢?就是在不改变原先类,我们可以在其中添加咱们自定义的方法,这样和同事合作 ...

  3. OC中protocol、category和继承的关系--转

    开放封闭原则(OCP)就是,“对扩展开放,对更改封闭”.是所有面向对象设计的一个核心宗旨.感兴趣的可以看百度百科的一些解释:http://baike.baidu.com/view/2493421.ht ...

  4. OC笔记一:Objective-C简介

    1.OC简介 全称:Objective-C,是扩充C的面向对象编程语言,主要用于iOS和Mac OS开发. C语言的基础上,增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码中混入C语言代码 ...

  5. [OC笔记]@property之个人理解,大神轻拍

    /** * 一个简单的对象 * * @author suzhen * */ public class SimpleObjcet { /** * 声明一个age字段 */ private Object ...

  6. OC笔记一:Objective

    1.OC简介 全称:Objective-C,是扩充C的面向对象编程语言,主要用于iOS和Mac OS开发. C语言的基础上,增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码中混入C语言代码 ...

  7. [OC笔记]我的第一个OC程序

    这是我第一个OC程序,详情都写在了注释里面,讲的是Student和Book这两个类的创建和使用.(是不是觉得student这个类在各种语言入门代码里经常出现呢?真实有爱) 看完这些,你会发现,咱们其实 ...

  8. OC之protocol监听器的实现

    画图 图解 代码 总结 一.画图 本人画了一个图(字体和画图水平请忽略) 二.图解 1.首先我们上边是一个按钮的类,按钮当中包括了一条线,这个线是什么呢? 其实难理解就难理解到这条线上了 1⃣️这条线 ...

  9. oc语言--protocol(协议)

    一.protocol 1.基本用途 1> 可以用来声明很多方法,但是不能用来声明成员变量 2> 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 3> 只要父类遵守了某 ...

随机推荐

  1. iOS静态分析举例

    XCode-> Product -> Analyze 即可进行iOS静态代码分析.静态分析能发现的问题包括以下几种类型: 1.逻辑错误:访问空指针或未初始化的变量等: 2.内存管理错误:如 ...

  2. Robotium怎样判断测试结果

    Robotium判断测试结果的方法主要有三类:assert.is.search.assert方法除了Robotium API,还有Junit中的所有断言方法,Junit的断言方法下篇详解. void ...

  3. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  4. 27. Oracle 10g下emctl start dbconsole 报错:OC4J Configuration issue 问题解决

    (dbconsole配置好外面的sqlplus才能连的上服务器上的数据库) 采取重新配置emctl 的方法来解决 [oracle@guohuias3 oracle]$ emca -config dbc ...

  5. 关于web前端开发学习的顺序

    学习web前端开发该怎么学,按照什么顺序学习,这是很多新手朋友会遇到的问题.下面简单的说一下.由于在国内大学课程里面,几乎没有前端开发这门课程,无非就是一些网页设计之类的课程,但那些课程无论是老师讲还 ...

  6. AKKA(一)认知AKKA

    Akka 是一个用 Scala 编写的库,用于简化编写容错的.高可伸缩性的 Java 和 Scala 的 Actor 模型应用.它已经成功运用在电信行业.系统几乎不会宕机(高可用性 99.999999 ...

  7. const关键字也许该被替换为readonly

    只读的变量,其值在编译时不能被使用,因为编译器在编译时不知道其存储的内容. const修饰的只读变量 const  int   Max = 100: int  Array[Max] ; c文件中,编译 ...

  8. 1、Python环境安装部署

    一.环境准备 1.下载Python安装包(至官方网站) https://www.python.org/downloads/ 建议下载安装最新版 2.设置"环境变量" "我 ...

  9. thinkPHP--SQL连贯操作

    一.连贯入门 连贯操作使用起来非常简单,比如查找到 id 为 1,2,3,4 中按照创建时间的倒序的前两 位. //连贯操作入门 $user = M('User'); var_dump($user-& ...

  10. linux chmod 755

    chmod是Linux下设置文件权限的命令,后面的数字表示不同用户或用户组的权限. 一般是三个数字: 第一个数字表示文件所有者的权限 第二个数字表示与文件所有者同属一个用户组的其他用户的权限 第三个数 ...